2

不完全なマージを元に戻そうとしていますが、両方のコマンドからの元に戻す変更が正しくないようです。

これは私がマージコミットを作成した方法です:

# merge master into branch:
git checkout branch
git merge master
# resolve conflicts
git commit
git push

今、私はそのマージを元に戻したい:

git log b2e
  commit b2e...
  Merge: de9... cf4...
git revert -m 1 -n b2e

問題は、git statusマージ全体ではなく、解決した競合のみを元に戻すことを示していることです。このコマンドgit revert -m 2 -n b2eは、マージ前にブランチに加えられた変更を元に戻しますが、これも望ましくありません。

2 番目の質問: マージ コミットで変更された内容を表示するにはどうすればよいですか?

git show b2e      # only shows the conflicts I resolved
git diff b2e de9  # does the same
git diff b2e cf4  # shows what is different between the branch and master

更新:de9コミットは元に戻すのに適切なものであり、git diff b2e de9 は何がコミットされたかを示します。私が混乱した理由の 1 つは、削除/保持の競合が差分に表示されなかったためでした。そのため、git が表示していない変更があると思いました。cf4からのコミットであるへの diff'ing は、master何が起こっているのかよくわからなかったので、さらに混乱しました。この質問に答える必要はありません。

4

1 に答える 1

1

Git revertあなたがやりたいことではないかもしれません。マージ前の場所に戻る最も簡単な方法は、git reset --hard HEAD^代わりに実行することです (または、元に戻したいコミットの SHA1 を の代わりに使用しますHEAD^)。特に、自分で作業している場合、またはマージおよび/またはリバートをまだプッシュしていません。を使用してマージを元に戻すrevertと、元に戻したコミットを簡単に再マージできない状況に遭遇する可能性があり、元に戻す自体が新しいコミットとして記録され、一般的にすぐに混乱する可能性があります。例と戦略については、http: //progit.org/2010/03/02/undoing-merges.htmlを参照してください。

于 2010-09-27T21:15:11.603 に答える