gitでコミットの範囲を元に戻すにはどうすればよいですか?gitrevisionsのドキュメントを見ると、必要な範囲を指定する方法がわかりません。例えば:
A -> B -> C -> D -> E -> HEAD
同等のことをしたい:
git revert B-D
結果は次のようになります。
A -> B -> C -> D -> E -> F -> HEAD
ここで、FにはBDの逆が含まれます。
gitでコミットの範囲を元に戻すにはどうすればよいですか?gitrevisionsのドキュメントを見ると、必要な範囲を指定する方法がわかりません。例えば:
A -> B -> C -> D -> E -> HEAD
同等のことをしたい:
git revert B-D
結果は次のようになります。
A -> B -> C -> D -> E -> F -> HEAD
ここで、FにはBDの逆が含まれます。
回答:
使用しているGitのバージョンは何ですか?
複数のコミットの復帰は、Git1.7.2 +でのみサポートされています。詳細については、「復帰を複数回使用して古いコミットにロールバックする」を参照してください。
現在のgit revert
manページは、現在の Gitバージョン(1.7.4以降)専用です。
以下のようOPアレックス・スパーリングはコメントで報告します。
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"
git revert OLDER_COMMIT^..NEWER_COMMIT
^
リビジョンパラメータのサフィックスは、そのコミットオブジェクトの最初の親を意味します」。
コミット範囲BをDに(少なくともgitバージョン2では)単一のコミットで元に戻したい場合は、次のようにすることができます。
git revert -n B^..D
これにより、Bの親コミット(除外)からDコミット(含まれる)へのコミットによる変更が元に戻されますが、元に戻された変更でコミットは作成されません。元に戻す操作では、作業ツリーとインデックスのみが変更されます。
変更をコミットすることを忘れないでください
git commit -m "revert commit range B to D"
同じ方法を使用して、1つのコミットで関連のない複数のコミットを元に戻すこともできます。たとえば、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
git revert -n B..D
コミットBを元に戻さず、CとDのみを元に戻しgit revert -n B^..D
ます。B も元に戻し ます。
git revert -n master~5..master~2
と、5番目に最新のコミットが含まれていることがわかります。しかしmaster~5
、実際には6番目に新しいコミットです。記法に関する詳細情報については、git docsのリビジョン選択を参照してください..
:-)
している git revert OLDER_COMMIT^..NEWER_COMMIT
うまくませんでした。
私が使用しgit revert -n OLDER_COMMIT^..NEWER_COMMIT
、すべてが良好です。私はgitバージョンを使用してい1.7.9.6
ます。
-n
または--no-commit
、単一の範囲全体のすべての変更を元に戻しますオプションは、すべてが範囲内にコミットのコミットの代わりに元に戻すを作成するので、コミット。最終結果は同じで、同じ変更が元に戻されます。gitの履歴をどのように表示するかによって異なります。
git rebase -i
関連するコミットを1つにまとめるために使用します。その後、元に戻すコミットが1つだけあります。