3

2つのコミット(AとB)を1つの新しいコミット(C)に押しつぶしました。前の2つのコミット(AとB)は削除されました。これらのコミットを開発リポジトリから中央(ベア)リポジトリにプッシュしました。両方のgit-logリポジトリで、コミットAとBが削除されたことを確認します。問題は、すでに(AとB)があった3番目のリポジトリをプルすると、3つすべてのコミット(A、B、C)が含まれるようになることです。

プルによってこれらの変更が同期されると思いました。A〜1をチェックアウトしてから、新しい変更をマージする必要がありますか?これは、特に本番環境では面倒なようです。

4

1 に答える 1

9

これは主に「アップストリームリベースからの回復」でカバーされていますが、私の好みには少しわかりにくいです。

git pull origin masterあなたはそれが正確にに等しいことを知っているべきgit fetch master; git merge origin/masterです。言い換えれば、あなたはgitにBとCを一緒にマージするように依頼しました。すでに公開されている変更をリベースすることはお勧めできない理由があります。古いコミットを復活させるのは非常に簡単だからです。

これは単純なスカッシュだったので、これgit pull --rebaseを理解することができます。誤ったマージの前の場所にリセットし、git pull --rebase origin master(またはgit rebase origin/master、すでにフェッチしているので)と言います。これにより、A、B、およびそれ以降のコミットが魔法のようにCに移植され、A + B=Cであることがわかります。

このような混乱を避けることができるので、これをデフォルトにすることをお勧めします—構成branch.<name>.rebaseをtrueに設定します。

于 2011-01-07T01:51:17.800 に答える