web-dev-qa-db-ja.com

gitフェッチを逆にする

私はgitと、プル、フェッチ、マージの違いを完全に理解しています。たまに追跡、フェッチ、マージするリモコンがあります。たとえば、Origin/masterだとしましょう。私が探しているのは、「gitfetch」の動作を逆にすることです。間抜けに聞こえますが、リモートトラッキングブランチが古い状態、つまり最後のフェッチの直前の状態を指している場所を更新解除したいと思います。これは可能ですか?

たとえば、これが私のワークフローだとしましょう...

git show Origin/master # shows commit abc123

git fetch              # yay i got something!

git show Origin/master # shows commit def456

ミステリーコマンドはここに行くので...

git show Origin/master # shows commit abc123

ちょっと奇妙なことですが、gitリポジトリを監視してフェッチするものがあるかどうかを検出するcrontabがあり、この動作に基づいていくつかのアクションを実行するスクリプトのデバッグに問題があります。オリジン/マスターが変更されるのを待つのではなく、スクリプトをデバッグできるように自分で変更したいと思います。

24
user2141094

あなたが欲しい

git update-ref refs/remotes/Origin/master refs/remotes/Origin/master@{1}

update-refは、refの命名規則を尊重するコマンドよりも(はるかに)低レベルであるため、更新するrefの完全なスペルを必要とします。

17
jthill

それを行うための実際のgitコマンドがあるかどうかはわかりませんが、これは大きなハックですが...

echo $OLD_COMMIT > .git/refs/remotes/Origin/master

動作するはずです

1
Dewey Sasser

これは「gitfetchを逆にする」という答えではありませんが、実際の問題は、リポジトリを必ずしも変更せずに、プログラムで「リポジトリの変更を監視する」方法にあるようです。

これには、git fetch --dry-runを使用できます。ドライランではリポジトリに変更はありませんが、リモートに変更がある場合は、基本的な端末出力があります。変更がない場合、出力はありません。これを手動チェックではなく自動スクリプトとして実行したい場合は、出力についてgit fetch --dry-runをテストする単純なbashスクリプトを作成するのは比較的簡単です。

1

今回はあなたが欲しいものを手に入れたことを願っています、そしてそれはこれだと思います:

git rebase Origin/master --onto Origin/master^
0
Stephan