Gitで間違いを取り消す5つの方法
ソフトウェア開発は、どんなに経験があっても、間違いを犯すことは避けられません。しかし、優れたプログラマーと普通のプログラマーの違いは、彼らが veokeエラーを知っていることです!
GITをバージョン制御システムとして使用する場合、「元に戻すツール」の強力なセットが既にあります。この記事では、Gitでエラーを元に戻す5つの強力な方法を示します!
キーポイント
- GITを使用すると、ユーザーは不要なローカル変更を破棄してコードのエラーを元に戻すことができます。これは、ファイルを最後のコミットされた状態にリセットする
git restore
コマンドを使用して実行できます。詳細な制御をするには、-p
フラグを使用してパッチレベルで変更を破棄できます。 -
git log
コマンドを使用して、特定のファイルを特定のバージョンに復元できます。ユーザーは、破損したファイルの「エラーコミット」を識別し、git checkout
コマンドを使用して、間違ったコミットの前にファイルをバージョンに復元できます。 - gitの
Reflog
ツールを使用して、紛失したバージョンまたは削除されたブランチを復元できます。Reflog
ローカルリポジトリ内のすべてのヘッドポインターの動きを記録し、ユーザーが以前の状態に戻り、失われたデータを復元できるようにします。 - ユーザーは
git cherry-pick
コマンドを使用して、コミットを別のブランチに移動できます。コミットが間違ったブランチにある場合、ユーザーは正しいブランチをチェックアウトし、過去のコミットを移動してから、git reset
を使用して、元のブランチから不要なコミットを削除できます。
いくつかのローカルな変更を破棄します
エンコーディングプロセスは通常混乱しています。時々、それは2歩前進し、一歩後退するように感じます。言い換えれば、あなたが書くコードのいくつかは素晴らしいです...しかし、いくつかはそうではありません。これは、Gitが役立つ場所です。これにより、良い部分を維持し、必要のない変更を破棄できます。
いくつかの「ローカル」の変更(つまり、まだ提出されていない変更)を含むサンプルシナリオを見てみましょう。
注:より良い概要とより明確な視覚化のために、いくつかのスクリーンショットでTower Gitデスクトップクライアントを使用しました。このチュートリアルを学ぶためにタワーは必要ありません。
最初にgeneral.css
で問題を解決しましょう。私たちが行った変更は、完全に間違った方向に進んでいました。すべての変更を元に戻して、ファイルの最後のコミットステータスを再作成しましょう:
$ git restore css/general.css
それに注意してください。または、git checkout
コマンドを使用して同じ結果を達成できます。しかし、git checkout
には多くの異なる用途と意味があるため、わずかに更新されたgit restore
コマンドを使用することを好みます(これらのタイプのタスクにのみ焦点を当てています)。
index.html
の2番目の質問は少し難しいです。このファイルで行った変更のいくつかは実際には良好であり、文書化されていないものの一部のみが必要です。
同じように、git restore
コマンドは問題を解決しますが、今回は
$ git restore css/general.css
最初のブロックの変更(維持するため)に「n」と2番目のブロックの変更(廃棄)の「y」と入力したことに気付くでしょう。プロセスが完了すると、貴重な変更の最初の部分だけが残っていることがわかります。
時々、
ファイルを
特定のバージョンに復元することができます。たとえば、過去のある時点でがうまくいったことを知っていますが、今ではありません。この時点では、プロジェクト全体ではなく、この特定のファイルについてのみ戻りたいです!
最初に、復元する正確なバージョンを見つける必要があります。正しいパラメーターセットを使用して、個々のファイルの履歴をコマンドに表示できます。
index.html
git log
$ git restore -p index.html
詳細情報が必要で、これらのコミットのコンテンツを表示したい場合は、
フラグを使用して、これらのコミットの実際の変更を表示できます。
index.html
コミットの前にファイルのバージョンを復元します!これは重要です。誤ったコミットでファイルを再開する代わりに、最後の良い状態、つまりコミットの前に復元します!
間違ったコミットのハッシュ値に-p
$ git log -- index.html
があなたのローカルワーキングコピーで変更されていることがわかります。GITは、ファイルの最後の良いバージョンを復元しました! reflog
を使用して失われたバージョンを回復します$ git log -p -- index.html
もちろん、そのようなログは、物事がうまくいかない状況に最適です。それでは、最初に小さな災害を作成しましょう - それから私たちはそれをリフェログで修正することができます。
最後の数人のコミットが良くないと確信しているとします。それらを取り除きたいので、前のバージョンに戻るために
を使用します。その結果、「エラー」のコミットは、あなたのコミット履歴から消えました - あなたが望むように。 git reset
$ git restore css/general.css
まず、リフェログは非常に簡単に開くことができます。単純な
- で十分です。
-
git reflog
第二に、記録されたステータスは年代順にソートされており、最新のステータスが上部にあることに気付くでしょう。 - よく見ると、トップ(つまり、最新の)プロジェクトが「リセット」操作であることがわかります。これはまさに20秒前にやったことです。明らかに、このログは有効ですか? 今すぐ意図しない「リセット」を元に戻したい場合は、以前の状態に戻ることができます。これもここにも十分に文書化されています。その前の状態のコミットハッシュをクリップボードにコピーして、そこから開始するだけです。
- この前の状態を復元するには、
- を再度使用するか、単に新しいブランチを作成できます。
git reset
$ git restore -p index.html
削除されたブランチを回復します
リフェログは、他の状況でも役立つことがあります。たとえば、誤って削除してはならないブランチを誤って削除する場合。例のシナリオを見てみましょう:git reset
クライアント/チームリーダー/プロジェクトマネージャーが、開発してきた美しい分析はもはや必要ないと言っていると仮定しましょう。私たちはよく整理されており、もちろん、対応する
ブランチを削除します!上記の上記のシナリオの例では、現在、ブランチをチェックアウトしていることがわかります。削除できるようにするには、まず別のブランチに切り替える必要があります。
$ git restore css/general.css
gitは、非常に深刻なことをしようとしていることを教えてくれます。feature/analytics
は他の場所に存在しないユニークなコミットが含まれているため、削除すると(おそらく価値のある)データが破壊されます。 OK ...この機能は不要になったため、続行できます:
$ git restore -p index.html
次に何が起こるかを期待していたかもしれません。クライアント/チームリーダー/プロジェクトマネージャーは、機能が戻ってきたことを喜んで教えてくれます。 ? ?
同様に、貴重なデータを失った可能性のある悪い状況に直面しています!それで、リフェログが再び私たちを救うことができるかどうか見てみましょう:
$ git log -- index.html
よく見ると、良いニュースが明らかになります。ブランチを削除できる前に(悲惨な)ブランチを削除できるようにする前に、別のブランチに切り替えるにはgit checkout
を実行する必要があります(GITで現在のブランチを削除できないため)。もちろん、このチェックアウトもリフェログに記録されています。削除したブランチを復元するには、新しいブランチの出発点としての前にの状態を単に使用できるようになりました。
$ git log -p -- index.html
タワーのようなデスクトップGUIを使用している場合、そのようなエラーを元に戻すことは通常、
cmdzを押すのと同じくらい簡単です。
最後に、「ああ、いいえ!」の古典的なケースを見てみましょう。
今日、多くのチームは、「メイン」、「マスター」、「開発」などの長期的な支店への直接的な提出を禁止する規則を策定しています。通常、新しいコミットは、マージ/リベースによってのみこれらのブランチに到達する必要があります。ただし、忘れて直接送信することもあります...
次のシナリオを例として見てみましょう。
で提出する必要がありましたが、feature/newsletter
ブランチでのコミットを不注意に引き起こしました。ソリューションを段階的に見てみましょう。 master
:feature/newsletter
をチェックしています。
$ git checkout <bad-commit-hash>~1 -- index.html
コマンドを使用して、コミットを安全に移動できます。
cherry-pick
$ git reflog
feature/newsletter
これまでのところ、すべてがうまくいきました。ただし、cherry-pick
はmaster
ブランチからコミットを削除しません(永遠にはそこにないはずです)。だから私たちもそこで混乱をきれいにしなければなりません:
$ git restore css/general.css
に戻り、master
を使用して、歴史から不要なコミットを削除します。 git reset
ロック解除エラーは超大国です
私は前にそれを言ったが、残念ながら私たちは皆、それが真実であることを知っている:エラーを避けることはできない!私たちがプログラマーであっても、私たちは時々それを台無しにします。ですから、問題は、間違いを犯すかどうかではなく、どのように効果的に処理し、問題を解決するのかということです。
Git Undo Toolsの詳細については、「Git First Aid Kit」を強くお勧めします。これは、Gitのエラーをクリーンアップして元に戻す方法を示す(無料の)短いビデオコレクションです。 スムーズな発達、試してみる勇気をお祈りします。もちろん、修理が得意でなければなりません! GITを使用してエラー(FAQ)を元に戻すことについてのFAQ
との違いは何ですか?
およびヘッドポインターを特定のコミットに移動します。これは、実際にコミットにリセットされた後、すべてのコミットを「忘れた」ことを意味します。これは破壊的な操作であり、注意して使用する必要があります。一方、git reset
は、特定のコミットで行われた変更を取り消すための新しいコミットを作成します。既存の履歴を変えないため、これは安全な操作です。 git revert
操作を元に戻す方法は? git reset
git revert
既にgit reset
を使用して変更を保存し、これを元に戻したい場合は、git revert
コマンドを使用できます。たとえば、特定のファイルを解除する場合は、コマンド
を使用できます。 git add
元に戻すことはできますか? git add
git reset
はい、git reset <file></file>
またはgit reset
コマンドを使用して元に戻すことができます。
は、不要なコミットで行われた変更を取り消すための新しいコミットを作成します。 git commit
特定のファイルで変更を元に戻す方法は?
git reset
特定のファイルに変更を加えてこれらの変更を元に戻したい場合は、git revert
コマンドを使用できます。たとえば、git commit
は、指定されたファイルのローカル作業ディレクトリの変更を破棄します。 git reset
git stash
それは何ですか?
git stash
は、すぐに提出したくない変更を一時的に保存できるコマンドです。これは、別のブランチに切り替える必要があるが、現在の変更をコミットしたくない場合に役立ちます。後でgit stash apply
を使用して一時的な変更を適用できます。
私のgitの歴史を見る方法は?
git log
コマンドを使用して、git履歴を表示できます。これにより、リポジトリ内のすべてのコミットのリストとそのコミットメッセージが表示されます。
元に戻すことはできますかgit push
?
はい、元に戻すことができますが、これは地元の変更を取り消すよりも少し複雑です。 git push
オプションを備えた-f
コマンドを使用して、リモートリポジトリをローカルリポジトリに上書きする必要があります。同じリポジトリを扱っている他の人に問題を引き起こす可能性があるため、このコマンドに注意してください。 --force
git push
複数のコミットを元に戻す方法は?
複数のコミットを元に戻す場合は、
コマンドと構文を使用できます。たとえば、3回のコミットの前にヘッドポインターを後ろに移動します。 git reset
HEAD~<number></number>
ソフトリセットとハードリセットの違いは何ですか? git reset HEAD~3
ハードリセットの後にコミットを再開できますか?
はい、ハードリセット後にコミットを再開できますが、簡単ではありません。 Gitは、リフェログ内のすべてのREFアップデート(移動ヘッドポインターなど)のログを保持します。
コマンドを使用して、回復したいコミットを見つけてから、
を使用してそのコミットで新しいブランチを作成できます。以上がGitで間違いを取り消す5つの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











このパイロットプログラム、CNCF(クラウドネイティブコンピューティングファンデーション)、アンペアコンピューティング、Equinix Metal、およびActuatedのコラボレーションであるCNCF GithubプロジェクトのARM64 CI/CDが合理化されます。 このイニシアチブは、セキュリティの懸念とパフォーマンスリムに対処します

このチュートリアルは、AWSサービスを使用してサーバーレスイメージ処理パイプラインを構築することをガイドします。 APIゲートウェイ、Lambda関数、S3バケット、およびDynamoDBと対話するECS Fargateクラスターに展開されたnext.jsフロントエンドを作成します。 th

これらのトップ開発者ニュースレターを使用して、最新のハイテクトレンドについてお知らせください! このキュレーションされたリストは、AI愛好家からベテランのバックエンドやフロントエンド開発者まで、すべての人に何かを提供します。 お気に入りを選択し、Relを検索する時間を節約してください
