1. ホーム
  2. git

[解決済み] Git Revert の使用方法

2022-03-01 20:22:01

質問

どのように git revert を使用していますか?

これは重複する質問のように聞こえるかもしれませんが、人々がこれを質問すると、多くの場合、その回答は git reset のように GitでSHAハッシュによるコミットへの復帰?

そして、誰かが git reset を使うべきだという答えが返ってきます。 git revert のように Git - ロールバックの方法

いつの間にか8人の人が登場し、それぞれ独自の方法でOPの尻拭いをするのですが、そのすべてがあなたの頭上にあるのです。

というわけで、この本の概要を説明し、「ダミーズガイド」を書いてみましょう。 git revert .

シナリオ:masterに2回コミットし、その内容が悪い。プッシュしたら、他の人があなたの悪い変更点を手に入れた。

それを元に戻したい。ウィザードやパッケージマネージャがあちこちのものを大量に変更したとします。

これがソース管理というものです。きっと簡単なんでしょうね。

さて、あなたが使うのは git revert が、どのように?

と実行した後 git revert の後に、何か他のことをする必要がありますか?revert が行った変更をコミットする必要があるのか、それとも revert が直接レポにコミットするのか、それとも何か?

明らかに、もう一度プッシュする必要がありますし、おそらくチームに自分のボールアップを発表することになるでしょう。

どのように解決するのか?

git revert は新しいコミットを作成します。

git revert は、単に既存のコミットと反対の新しいコミットを作成します。

これは、元に戻されたコミットが存在しなかったかのように、ファイルを同じ状態で残します。たとえば、次のような簡単な例で考えてみましょう。

$ cd /tmp/example
$ git init
Initialized empty Git repository in /tmp/example/.git/
$ echo "Initial text" > README.md
$ git add README.md
$ git commit -m "initial commit"
[master (root-commit) 3f7522e] initial commit
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
$ echo "bad update" > README.md 
$ git commit -am "bad update"
[master a1b9870] bad update
 1 file changed, 1 insertion(+), 1 deletion(-)

この例では、コミット履歴に2つのコミットがあり、最後の1つは間違いです。git revertを使用します。

$ git revert HEAD
[master 1db4eeb] Revert "bad update"
 1 file changed, 1 insertion(+), 1 deletion(-)

ログには3つのコミットが記録されます。

$ git log --oneline
1db4eeb Revert "bad update"
a1b9870 bad update
3f7522e initial commit

つまり、起こったことの履歴は一貫しているのに、ファイルはまるで悪いアップデートがなかったかのような状態になっているのです。

cat README.md 
Initial text

元に戻すコミットが履歴のどこにあるかは関係ありません (上の例では最後のコミットが元に戻されます。どのコミットも元に戻すことができます)。

終了時の質問

<ブロッククオート

この後、何かする必要がありますか?

A git revert ちょうど 他のコミット、例えばリモートにプッシュして、他のユーザーがその変更をプル/フェッチ/マージできるようにすれば完了です。

<ブロッククオート

revert が行った変更をコミットする必要がありますか、それとも revert が直接レポにコミットするのですか?

git revert はコミットです。単一のコミットを取り消すことがあなたのやりたいことだと仮定すれば、余分な手順はありません。

もちろん、再度プッシュする必要がありますし、おそらくチームにもアナウンスする必要があるでしょう。

確かに - もしリモートが不安定な状態なら - チームの他のメンバーに、修正を得るためにプルする必要があることを伝えるのは正しい行動でしょう (コミットの取り消し) 。)