web-dev-qa-db-ja.com

単一のコミットの一部として複数のコミットを元に戻す方法

これは大きな問題ではなく、可能かどうかを知りたいだけです。

abcd123wxyz789の2つのコミットがあるとします。これらは、リポジトリの歴史のはるか昔に、隣接していない別々の場所で発生します。今、それらを元に戻したいとしましょう。やること

git revert abcd123 wxyz789

abcd123を元に戻すコミットとwxyz789を元に戻すコミットの2つの別個のコミットになります。

これで問題はありませんが、2つのコミットで修正したい間違いが論理的にリンクされていて、自己文書化の目的で、単一の「I何かを壊したので、今はファイルx、y、zを元に戻しています "コメント?これを行うgitコマンドはありますか?

(もちろん、すべての変更を手動で修正してからプッシュするだけでコミットを作成できることは承知しています。これはすべての疑わしい理由で苦痛です。)

55
JimmidyJoo

できるよ:

git revert abcd123
git revert --no-commit wxyz789
git commit --amend

...そして、両方のコミットを取り消すことの複合効果を説明する適切なコミットメッセージを記述します。

71
Mark Longair

互いに変更する複雑な復帰の場合、revert --no-commitに問題がある可能性があります。

私の簡単な解決策は、実際に元に戻すことでした。

git revert <all commits>
git rebase -i

そして、最初のコミットを除くすべてのリバートをsquashとしてマークして、単一のコミットを作成します。

37
ElyashivLavi
git revert -n <commits>
git commit

最初のコマンドは、コミットを作成せずにすべての取り消しを行い、最終結果をステージングします(-nオプション)。その後、commitコマンドは単一のコミットを作成します。

22
lyu