2009-11-27 41 views
90

SVNでは、コミットを逆マージするのは簡単ですが、Gitでそれを行う方法は?私が正しくあなたを理解していれば、あなたが以前のバックアウトするGit:コミットを逆マージする方法は?

svn merge -rn:n-1 

をやって話している

+0

重複[前のGitリポジトリに戻すコミット](http://stackoverflow.com/questions/4114095/revert-to-a-previous-git-commit) –

+0

私はこれが質問によって意味されているとは思わない。 SVNの逆マージは、コミットの変更をローカルの変更に戻すので、編集して再度コミットすることもできます。 – Dormouse

答えて

92

を探している、コミット過去のコミットの変更を元に戻す新しいコミットを作成するには、次のようにします:

$ git revert <commit> 

実際にはリベースしてからリセットすることで、過去の任意のポイントからコミットを削除することはできますが、すでにコミットを別のリポジトリにプッシュしている(または他の誰かがあなたから引っ張ってしまった)場合は、本当にやりたくありません。

+25

元に戻す変更を指定するには、 'git revert 'に' -m 'オプションを指定する必要があります。公開されていない履歴のマージを取り消したい場合は、 'git reset -hard HEAD^1'を使います。 –

+2

Jakub:マージコミットを元に戻すのは当然ですが、Subversionの用語では「逆マージ」は実際にはコミットを元に戻すための名前です。 –

+4

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

4

その場合、あなたはおそらくへ

git revert 
84

マージコミットを元に戻すには、git revert -mを使用する必要があります。あなたがするだろう、
git revert -m 1 HEAD

を最後にコミットする前にコミットマージを戻すには:
git revert -m 1 HEAD^

使用をしたがって、たとえば、元に戻すために、最近のほとんどは、あなたが使用する番号1で親を使用してコミットマージ親を見るにはgit show <merge commit SHA1>、数字は表示される順番です。 Merge: e4c54b3 4725ad2

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

gitのマージ議論(紛らわしいが、非常に詳細): http://schacon.github.com/git/howto/revert-a-faulty-merge.txt

+28

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

+6

親を見るには 'git show 'を使います。数字は表示される順序です。 'Merge:e4c54b3 4725ad2' – supermethod

+4

例:' git revert -m 1 SHA1' そのコマンドは、頭の前にいくつかのマージコミットであったマージコミットを元に戻し、下に多くのコミットを持っていました。 –

-2
git reset --hard HEAD^ 

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

+2

これは、元のポスターが要求していることをしないマージコミットをスローします。 OPは前回の変更を元に戻すために逆パッチを実行しようとしていますが、以前の変更の履歴を完全に消去するわけではありません。 –

-1

あなたがコミットしたい、以降のコミットしたくない場合は(もすることができます編集、メッセージはまだあなたのために準備されますコミット):の

git revert -n <commit> 
関連する問題