web-dev-qa-db-ja.com

'revert'、 'amend、' 'rollback'、および 'undo' commitの違いは何ですか?

私はGitをかなり頻繁に使用していますが、まだ初心者です。

時々、私は間違いを犯しますが、それだけを見つけます私はそれをコミットしました。その時点で、私は通常、インターネット上で長い時間をかけて、(プッシュする前に)それを取り除くために使用する必要のあるコマンドを探す必要があります。

それが起こるたびに、私は私が通常遭遇する4つの用語の違いは何であるか疑問に思います:

  • 元に戻す、
  • 修正、
  • ロールバック、
  • 元に戻します。

いよいよ、これらの違いを一度だけ学ぶ時が来ました。彼らは何ですか?

17
gosbi

revertおよびamendという用語は、Gitで明確に定義された意味を持っています。対照的に、rollbackおよびundoには、そのような明確な意味はありません、および解釈にオープンです。

コミットを元に戻す...

...(現在のブランチで)別のコミットが導入した逆の変更を適用する新しいコミットを作成することを意味します。これは、破棄(つまり、履歴の書き換え)を伴わないため、すでに他のユーザーと共有されているリポジトリの問題を修正するための推奨されるアプローチです。

<commit>で識別されるコミットを元に戻すには、単に実行します

    git revert <commit>

コミットを修正しています...

...「現在の」コミットを同じ親を持つ新しいコミットに置き換えることを意味します。詳細については git commit --amendは正確にどのように機能しますか?

enter image description here

を注意

  • 共有リモートにすでにプッシュしたコミットを修正することは、履歴の書き換えの一形態であるため、悪い習慣です(これは、共同作業者がすでに作業に基づいている可能性のある最新のコミットを「削除」します)。
  • 特定のブランチの最後のコミットのみを修正できます。古いコミットを書き直すには、大きな銃を引き出す必要があります(インタラクティブなリベースなど)。

    コミットを修正するには、必要なすべての変更を加えてステージングしてから、

    git commit --amend
    

    現在のブランチの最後のコミットが修正されるため、ここでコミットを指定する必要はありません。次に、エディターがポップアップし、コミットメッセージを変更する機会が与えられます。

ロールバック...

...通常は、ローカルの変更を破棄(または隠蔽)し、ブランチをコミットにリセットすることを意味します(または、単にコミットをチェックアウトしますが、それは、物事が混乱し始めたコミットの前に、分離されたHEAD状態になります)。使用する

    git reset <commit-before-things-started-to-go-belly-up>

コミットを元に戻します...

...コンテキストに応じて、

  • revertコミット、
  • amendコミット、
  • インタラクティブなリベースを介してコミットを削除します。
17
jub0bs

変更を元に戻すgit checkoutgit revertgit resetgit clean

  • git revert:このコマンドは、コミットの変更を元に戻します。ログに実績を残します。
  • git reset:このコマンドは、コミットの変更を元に戻します。ログに実績を保持しません。つまり、元に戻されたコミットにリセットされます。 注:これは破壊的な機能です。このコマンドの使用には注意する必要があります。

    • git reset --soft HEAD^最後のコミットを元に戻し、ステージングに変更を加えます
    • git reset --hard HEAD^最後のコミットとすべての変更を元に戻す
    • git reset --hard HEAD^^最後の2つのコミットとすべての変更を元に戻す
  • git commit --amendここで、amendは、最後のコミットに追加することを意味します。コミットするファイルを追加するのを忘れることがありました。たとえば、abc.txtファイルを忘れた場合、次のように追加できます。git add abc.txtおよびgit commit --amend -m "New commit message"

4
Premraj

git --amendgit --amendコマンドは、別のGitリポジトリのパブリックブランチにプッシュされていないコミットに対してのみ使用する必要があります。 git --amendコマンドは新しいコミットIDを作成し、人々はすでに既存のコミットに基づいて作業を行っている可能性があります。この場合、新しいコミットに基づいて作業を移行する必要があります

git revertgitrevertコマンドを使用してコミットを元に戻すことができます。このコマンドは、コミットの変更を元に戻します。このようなコミットは、変更が取り消されたことを文書化するのに役立ちます。

これが[ここにリンクの説明を入力] [1]です

[1]: Gitリポジトリを特定のコミットにロールバック(リセット)するにはどうすればよいですか? ロールバック手法について

2
gpullen