Git でのコミットの取り消し
- Git でコミットを元に戻す-ハードリセット
- Git でコミットを元に戻す-Git をリセット
- Git でコミットを元に戻す-Git をソフトリセット
- Git でコミットを元に戻す-ハードリセットファイルを復元する
この記事では、Git コミットを使用しているときに、それを実行するつもりがないことを回復する方法について説明します。Git は、特定の問題に取り組むために大規模なプロセスが必要になるほど複雑ではありませんが、発生する問題が非常に大きいため、問題の内容と結果に応じてさまざまな手法が必要になります。
Git には理解しやすい側面がたくさんありますが、以前の場所に戻るのははるかに簡単で評価できます。リポジトリ内の主要な変更を元に戻す方が簡単です。コマンドを使ってどのように実行されるかわからないのは少し怖い瞬間です。しかし実際には、コミットやコミットの取り消しなどの小さなことを行うのは驚くほど簡単です。
しかし、この場合、不要なコミット
を元に戻し、次に新しい変更をコミット
するために何をしますか。
いくつかの変更を加えてから変更をコミットした場合、その目的のために、これを行うには 4つの方法があるとしましょう。
Git でコミットを元に戻す-ハードリセット
これがある場合、40 は HEAD
、(42)はファイルの状態です。
(42)
38-39-40
↑
Head
そして、あなたはコミットを取り消す 40 を望み、それを二度と見たくなくて、ローカルで変更されたファイルのすべての変更を消去したいと思います。
次のコマンドを使用します。
git reset --hard HEAD ~ 1
出力:
(42)
38-39
↑
Head
現在、39 は HEAD
です。上記の例では --hard
を使用したため、ファイルはコミットヘッドで 39 番目のコミットの状態にリセットされます。
Git でコミットを元に戻す-Git をリセット
最後のコミット 40 は大したことではなく、少しずれているとしましょう。ここで、コミットを元に戻す
必要がありますが、変更は保持します。ここからもう一度始めます。HEAD
として 40 を使用します。
(42)
38-39-40
↑
Head
--hard
パラメータを使用する代わりに、次のコマンドを使用します。
git reset HEAD ~ 1
出力:
(42)
38-39-40
↑
Head
どちらの場合も見てきたように、HEAD
は最新のコミットを定義するだけです。git reset HEAD~1
を実行すると、コマンド Git は HEAD
ポインターを 1つのコミットに戻します。ただし、(--hard
を使用しない限り)ファイルは以前のままにしておきます。何も失っていません。
Git でコミットを元に戻す-Git をソフトリセット
簡単に言うと、コミットを元に戻す
こともできますが、次を使用してファイルとインデックスを残すことができます。
git reset --soft HEAD ~ 1
これはファイルをそこに残すだけではありません。インデックスをそのままにしておきます。git status
を実行すると、以前と同じファイルがインデックスに含まれていることがわかります。実際、このコマンドの後で、git commit
を実行でき、以前のコミットを再度実行できることがわかります。
Git でコミットを元に戻す-ハードリセットファイルを復元する
最初のオプションの例のようにコミットを元に戻したが、後でそれが必要であることに気付いたとします。さて、何をしますか?
心配しないでください、そしてそれを取り戻す方法はまだあります。コマンド git reflog
を使用して、移動した(未完了の)コミットのリストを確認します。破棄したコミットを見つけて、次のようにします。
git checkout -b BranchName CommitYouDestroyed
これで、そのコミットが復元されました。Git では、コミットは削除された日から 90 日間は削除されないため、バックアップとしてリポジトリに簡単に復元できます。
Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.
LinkedIn