24

私は git と、pull、fetch、merge の違いを完全に理解しています。私は時々追跡、フェッチ、およびマージするリモートを持っています。それがオリジン/マスターだとしましょう。私がやろうとしているのは、「git fetch」の動作を逆にすることです。ばかげているように聞こえますが、リモート トラッキング ブランチが指している場所を、最後のフェッチの直前の状態である古い状態に更新解除したいと考えています。これは可能ですか?

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

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 があり、この動作に基づいていくつかのアクションを実行するスクリプトのデバッグに問題があります。origin/master が変更されるのを待つ代わりに、スクリプトをデバッグできるように自分で変更したいと思います!

4

4 に答える 4

17

あなたがしたい

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

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

于 2013-03-06T18:14:36.350 に答える
2

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

これには、 を使用できますgit fetch --dry-run。予行演習によってリポジトリが変更されることはありませんが、リモートに変更がある場合は、基本的なターミナル出力が表示されます。変更がない場合、出力はありません。これを手動チェックではなく自動スクリプトとして実行する場合は、git fetch --dry-run出力をテストする単純な bash スクリプトを作成するのが比較的簡単です。

于 2016-12-28T15:45:00.960 に答える
1

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

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

動作するはずです

于 2013-03-06T18:10:14.830 に答える
0

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

git rebase origin/master --onto origin/master^
于 2013-03-06T18:13:23.677 に答える