Git:コミットをリバースマージする方法は?


124

SVNを使用すると、コミットをリバースマージするのは簡単ですが、Gitでそれを行う方法は?



これが質問の意味するところだとは思いません。SVNでのリバースマージでは、変更をコミットからローカル変更に戻します。そのため、それらを編集して再度コミットできます。
2016

回答:


105

過去のコミットの変更を「取り消す」新しいコミットを作成するには、次のコマンドを使用します。

$ git revert <commit>

リベースしてリセットすることで、過去の任意のポイントから実際にコミットを削除することも可能ですが、すでに別のリポジトリにコミットをプッシュしている場合(または他の誰かがあなたからプルしている場合)は、本当にそうしたくないです。 。


31
どの変更を元に戻すかを指定する-m <parent number>オプションgit revertを指定する必要があるでしょう。公開されていない履歴のマージを元に戻すには、を使用しますgit reset --hard HEAD^1
JakubNarębski、2009年

3
Jakub:マージコミットを元に戻す場合も同様ですが、Subversionの用語では、「リバースマージ」は実際にはあらゆる種類のコミットを元に戻すための名前です。
ベンジェームズ

4
を使用-mすると、マージされていないブランチからの将来のマージには、そのマージ前の変更が含まれないことに注意してください!マージされていないブランチを再マージする適切な方法については、schacon.github.com / git / howto / revert -a- faulty - merge.txtを参照してください。
Martijn Pieters

125

マージコミットを元に戻すには、以下を使用する必要がありますgit revert -m <parent number>。したがって、たとえば、番号1の親を使用して最新のマージコミットを元に戻すには、次のようにします。

git revert -m 1 HEAD

最後のコミットの前にマージコミットを元に戻すには、次のようにします。

git revert -m 1 HEAD^

使用する git show <merge commit SHA1>親を確認ためにします。番号付けは、親が現れる順序です。Merge: e4c54b3 4725ad2

git mergeのドキュメント: http //schacon.github.com/git/git-merge.html

git mergeディスカッション(混乱するが非常に詳細):http : //schacon.github.com/git/howto/revert-a-faulty-merge.txt


36
親に関連付けられている「番号」を取得するにはどうすればよいですか?ブランチには固有の数値「ID」がありますか?
daniyalzade、2011

7
git show <merge commit SHA1>親を表示するために使用します。番号付けは、それらが表示される順序です。例Merge: e4c54b3 4725ad2
スーパーメソッド

8
例:git revert -m 1 SHA1このコマンドは、先頭にいくつかのマージコミットがあり、その下に多数のコミットがあったマージコミットを元に戻すのに役立ちました。
c.apolzon

3
親はどれですか?e4c54b3または4725ad2?
イルカ

1
これでも、git showの結果が親番号とどのように関連しているかについて十分な情報が提供されていません。「表示される順序」は1ベースですか?0ベース?この例では具体的に、親1のSHA1は何ですか?e4c54b3または4725ad2?
カウリネーター2017

4

私があなたを正しく理解していれば、あなたは

svn merge -rn:n-1

以前のコミットを取り消す場合、その場合、おそらく探しています

git revert

0
git reset --hard HEAD^ 

上記のコマンドを使用して、マージの変更を元に戻します。


3
これはマージコミットを破棄しますが、元の投稿者が求めていることは実行されません。OPは、以前の変更の履歴を完全に消去するのではなく、以前の変更を元に戻すリバースパッチを実行しようとしています。

-1

コミットしたくない場合、または後でコミットしたい場合(コミットメッセージはまだ準備されており、編集することもできます):

git revert -n <commit>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.