Gitで一連のコミットを元に戻すにはどうすればよいですか? gitrevisions ドキュメントを見ると、必要な範囲を指定する方法がわかりません。例えば:
A -> B -> C -> D -> E -> HEAD
私は同等のことをしたい:
git revert B-D
結果は次のようになります。
A -> B -> C -> D -> E -> F -> HEAD
ここで、FにはB-Dの逆が含まれます。
Gitのどのバージョンを使用していますか?
Git1.7.2 +でのみサポートされている複数のコミットを元に戻す:詳細については、「 複数回元に戻すを使用した古いコミットへのロールバック 」を参照してください。
現在 - git revert
manページ は、currentGitバージョン(1.7.4+)専用です。
OP Alex Spurling はコメントで報告します:
1.7.4へのアップグレードは正常に機能します。
私自身の質問に答えるために、これは私が探していた構文です。
git revert B^..D
B^
は「Bの最初の親コミット」を意味します。これにより、B
を復帰に含めることができます。
見る " - git rev-parse
SPECIFYING REVISIONSセクション "には <rev>^
、例: HEAD^
構文:「 キャレットとは何ですか(^
)文字の意味? ")
戻された各コミットは個別にコミットされることに注意してください。
git revert OLDER_COMMIT^..NEWER_COMMIT
以下に示すように、すぐにコミットすることなく元に戻すことができます。
git revert -n OLDER_COMMIT^..NEWER_COMMIT
git commit -m "revert OLDER_COMMIT to NEWER_COMMIT"
1回のコミットでコミット範囲BからD(少なくともGitバージョン2)に戻したい場合は、次のようにします。
git revert -n B^..D
これにより、Bの親コミット(除外)からDコミット(含まれる)へのコミットによって行われた変更が元に戻されますが、元に戻された変更によるコミットは作成されません。復帰は、作業ツリーとインデックスのみを変更します。
後に変更をコミットすることを忘れないでください
git commit -m "revert commit range B to D"
同じ方法を使用して、単一のコミットで複数の無関係なコミットを元に戻すこともできます。たとえば、BとDを元に戻すがCは元に戻さない
git revert -n B D
git commit -m "Revert commits B and D"
リファレンス: https://www.kernel.org/pub/software/scm/git/docs/git-revert.html
ありがとう Honza Haering修正
git revert OLDER_COMMIT^..NEWER_COMMIT
を実行してもうまくいきませんでした。
git revert -n OLDER_COMMIT^..NEWER_COMMIT
を使用しましたが、すべて問題ありません。 gitバージョン1.7.9.6
を使用しています。
つかいます git rebase -i
関連するコミットを1つにまとめます。次に、元に戻すコミットが1つだけあります。