ソフトウェア エンジニアまたは Web 開発者として、多くのコミットを Git リポジトリにプッシュする必要がある場合があります。
ただし、Git リポジトリにプッシュされないファイルをコミットしたい場合もあります。コミットを発行する前に、追加の変更を実装したい場合があります。
その結果、Git リポジトリを通じて最後のコミットを元に戻す必要があります。このトピックでは、最後のコミットを元に戻す方法を見ていきます。
最後の Git コミットをリセットとともに元に戻す
次のコマンドを実行すると、最後の git コミットを簡単に元に戻すことができます。 「ギットリセット」 オプションと一緒に、つまり、 '-柔らかい' これにより、ファイルに加えられたすべての変更が保護されます。元に戻すコミットを「HEAD~1」として記述する必要があります。
git の最後のコミットは Git リポジトリから削除されます。
$ git reset --soft HEAD~1
この表記では、
'頭~1': これは、この HEAD をログの履歴内に入る前に 1 つのコミットにリセットしたいことを意味します。
オンスで10ml
$ git log --oneline 3fad532 Last commit (HEAD) 3bnaj03 Commit before HEAD (HEAD~1) Vcn3ed5 Two commits before HEAD (HEAD~2)
上記のコマンドの効果は何でしょうか?
コマンド、つまり、 「ギットリセット」 コマンドとして見ることができます。つまり、 「git追加」 、基本的にファイルを Git インデックスに挿入します。
のオプションを説明する場合、 '-柔らかい' , Git はインデックス内のファイルや実行ディレクトリ内のファイルをまったく変更しません。
たとえば、最近のコミットには 2 つのファイルが含まれていますが、このファイルにいくつかの変更を実装したいと考えています。
Inkscape vs Gimp
$ git log --oneline --graph *b734307 (HEAD -> master) Added a new file named 'file1' *90f8bb1 Second commit *7083e29 Initial repository commit
その結果、申請させていただきます 「ギットリセット」 のオプションと一緒に '-柔らかい' 最後のコミットを元に戻し、さらにいくつかの追加の変更を実装します。
$ git reset --soft HEAD~1 $ git status
支店長を超えて
私たちのブランチはコミット 1 より先のマスター/オリジンです (ローカル コミットを公開するために「git Push」を適用します)。
コミットする変更:
(apply 'git restore --staged …' to unstage)
新しいファイル: file1
$ git log --oneline --graph *90f8bb1 (Head -> master) Second commit *7083e29 Initial repository commit
ご覧のとおり、コミットは削除されましたが、最後のコミット (コミットされる変更) を元に戻すと、ファイルはまだインデックスに残っています。
リポジトリに対する最後のコミットが正常に完了しました。
Git コミットのハード リセット
上のセクションで次のことを簡単に検討できます。 最後のコミットを元に戻し、変更を保存します インデックス内の任意のファイルに対して実行されます。ただし、状況によっては、ファイルに加えられた変更とコミットを単に削除したい場合もあります。
それはオプションの目的です。つまり、 '-難しい' 。
最後のコミットを元に戻し、インデックスとディレクトリ内のすべての変更を削除するには、次のコマンドを実行します。 「ギットリセット」 オプションと一緒に、つまり、 '-難しい' コマンド HEAD の前にコミットを記述します ('頭~1') 。
アルファベットと数字
$ git reset --hard HEAD~1
すべてのコミットと変更は、使用後にインデックスとディレクトリから削除されます。 ' - 難しい' 指示。したがって、私たちは注意する必要があります。
たとえば、「file1」という名前の新しいファイルを Git リポジトリにコミットしました。
$ git log --oneline --graph *b734307 (HEAD -> master) Added a new file named 'file1' *90f8bb1 (Head -> master) Second commit *7083e29 Initial repository commit
ここで、最後のコミットを取り消してすべての変更を削除したいとします。
$ git reset --hard HEAD~1
現在、HEAD は 90f8bb1 の 2 番目のコミットにあります
次に、Git リポジトリの状態を確認してみましょう。
$ git status
支店長を超えて
私たちのブランチはマスター/オリジンと同時代のものです (ローカルコミットを公開するために「git Push」コマンドを適用します)。
辞書順に
これで、コミットするものは何もなくなり、作業ツリーはきれいになりました。
混合リセット Git コミット
ただし、変更はインデックス内ではなく、作業ディレクトリ内に保存してください。コマンドを適用する必要があります。つまり、 ., 'git リセット' オプションと一緒に、つまり、 「-混合」 。このコマンドの後で、最後のコミットに「HEAD~1」を追加するだけです。
$ git reset --mixed HEAD~1
たとえば、元に戻す必要があるコミット内に「file1」という名前のファイルを含めました。
$ git log --oneline --graph *b734307 (HEAD -> master) Added a new file named 'file1' *90f8bb1 (Head -> master) Second commit *7083e29 Initial repository commit
単純に、コマンドを実行します。つまり、 「ギットリセット」 オプションと一緒に、つまり、 「-混合」 最後のコミットを取り消します。
その結果、 「-混合」 コマンドは 'ミックス' ハード リセットとソフト リセットの 1 つであるため、その名前が付けられています。
支店長を超えて
私たちのブランチは、コミット 1 より先のマスター/オリジンです (ローカル コミットを公開するために「git Push」を適用します)。
追跡されていないファイル: (「git add …」を適用して、コミットするものを内部に追加します)
file1
コミットするために何も含まれていませんが、追跡されていないファイルが存在します (追跡のために「git track」を適用します)。
そこで、ファイルに加えられた変更を保存することで最後のコミットを元に戻す別の行為が検出されました。
最後のコミットを取り消して元に戻します
コマンドを適用します。つまり、 「git を元に戻す」 そして、元に戻すコミットを記述します。つまり、 '頭' 最後の Git コミットを元に戻すための履歴のコミットに。
$ git revert HEAD
コマンド「git revert」は、最後のコミットを縮退することによって定義されたいくつかの変更とともに、新しいコミットを記録できるため、コマンド「git revert」とは異なります。
イーディス・マック・ハーシュ
このリセットコマンドは、記述されたコミットを縮退しながら新しい HEAD の場所を設定するため、「git replace」コマンドを使用して「HEAD~1」を記述することができます。
その結果、元に戻すためにいくつかのファイルに変更を再度コミットし、未実行のままコミットします。 Git のリポジトリに新しいファイルをコミットしましたが、このコミットを縮退したいと考えています。
$ git log --oneline -graph *b734307 (HEAD -> master) Added a new file named 'file1' *90f8bb1 (Head -> master) Second commit *7083e29 Initial repository commit
「git revert」コマンドを実行すると、Git はテキスト エディターを開き、変更を自動的にコミットします。
コミット メッセージの実行が完了すると、新しいメッセージが新しいコミット ハッシュとともに表示されます。
[master 2d40a2c] Revert 'Added a new file named as file1' 1 file changed, 1 deletion(-) delete mode 100644 file1
Git の履歴を再度確認する必要がある場合は、リポジトリを通じて最後のコミットを元に戻すための新しいコミットが追加されていることに気づくことができます。
$ git log --oneline --graph *2d40a2c (HEAD -> master) Revert 'Added a new file named file1' *1fa26e9 Added a new file named as file1 *ee8b133 Second commit *a3bdedf Initial commit