ホームページ >テクノロジー周辺機器 >IT業界 >Gitで間違いを取り消す5つの方法

Gitで間違いを取り消す5つの方法

Joseph Gordon-Levitt
Joseph Gordon-Levittオリジナル
2025-02-10 12:19:08763ブラウズ

5 Ways to Undo Mistakes with Git

ソフトウェア開発は、どんなに経験があっても、間違いを犯すことは避けられません。しかし、優れたプログラマーと普通のプログラマーの違いは、彼らが veokeエラーを知っていることです!

GITをバージョン制御システムとして使用する場合、「元に戻すツール」の強力なセットが既にあります。この記事では、Gitでエラーを元に戻す5つの強力な方法を示します!

キーポイント

  • GITを使用すると、ユーザーは不要なローカル変更を破棄してコードのエラーを元に戻すことができます。これは、ファイルを最後のコミットされた状態にリセットするgit restoreコマンドを使用して実行できます。詳細な制御をするには、-pフラグを使用してパッチレベルで変更を破棄できます。
  • git logコマンドを使用して、特定のファイルを特定のバージョンに復元できます。ユーザーは、破損したファイルの「エラーコミット」を識別し、git checkoutコマンドを使用して、間違ったコミットの前にファイルをバージョンに復元できます。
  • gitのReflogツールを使用して、紛失したバージョンまたは削除されたブランチを復元できます。 Reflogローカルリポジトリ内のすべてのヘッドポインターの動きを記録し、ユーザーが以前の状態に戻り、失われたデータを復元できるようにします。
  • ユーザーはgit cherry-pickコマンドを使用して、コミットを別のブランチに移動できます。コミットが間違ったブランチにある場合、ユーザーは正しいブランチをチェックアウトし、過去のコミットを移動してから、git resetを使用して、元のブランチから不要なコミットを削除できます。

いくつかのローカルな変更を破棄します

エンコーディングプロセスは通常混乱しています。時々、それは2歩前進し、一歩後退するように感じます。言い換えれば、あなたが書くコードのいくつかは素晴らしいです...しかし、いくつかはそうではありません。これは、Gitが役立つ場所です。これにより、良い部分を維持し、必要のない変更を破棄できます。

いくつかの「ローカル」の変更(つまり、まだ提出されていない変更)を含むサンプルシナリオを見てみましょう。

5 Ways to Undo Mistakes with Git

注:より良い概要とより明確な視覚化のために、いくつかのスクリーンショットでTower Gitデスクトップクライアントを使用しました。このチュートリアルを学ぶためにタワーは必要ありません。

最初にgeneral.cssで問題を解決しましょう。私たちが行った変更は、完全に間違った方向に進んでいました。すべての変更を元に戻して、ファイルの最後のコミットステータスを再作成しましょう:

<code class="language-bash">$ git restore css/general.css</code>

それに注意してください。または、git checkoutコマンドを使用して同じ結果を達成できます。しかし、git checkoutには多くの異なる用途と意味があるため、わずかに更新されたgit restoreコマンドを使用することを好みます(これらのタイプのタスクにのみ焦点を当てています)。

index.htmlの2番目の質問は少し難しいです。このファイルで行った変更のいくつかは実際には良好であり、文書化されていないものの一部のみが必要です。

5 Ways to Undo Mistakes with Git

同じように、git restoreコマンドは問題を解決しますが、今回は-pフラグを使用する必要があります。

<code class="language-bash">$ git restore css/general.css</code>
gitはあなたを導き、あなたに尋ねます - そのファイルのすべての変更について - あなたがそれを破棄したいなら。

最初のブロックの変更(維持するため)に「n」と2番目のブロックの変更(廃棄)の「y」と入力したことに気付くでしょう。プロセスが完了すると、貴重な変更の最初の部分だけが残っていることがわかります。 5 Ways to Undo Mistakes with Git

特定のファイルを以前の状態にリセットします

時々、特定の

ファイルを

特定の

バージョンに復元することができます。たとえば、過去のある時点でがうまくいったことを知っていますが、今ではありません。この時点では、プロジェクト全体ではなく、この特定のファイルについてのみ戻りたいです! 最初に、復元する正確なバージョンを見つける必要があります。正しいパラメーターセットを使用して、個々のファイルの履歴をコマンドに表示できます。 index.html

git log

これには、Chanded Commitsの変更のみが表示されます。これは、問題が表示される「Bad Apple」バージョンを見つけるのに非常に役立ちます。
<code class="language-bash">$ git restore -p index.html</code>

詳細情報が必要で、これらのコミットの5 Ways to Undo Mistakes with Git コンテンツを表示したい場合は、

フラグを使用して、これらのコミットの実際の変更を表示できます。 index.html

かわいい小さなファイルを破壊した間違ったコミットを見つけたら、エラーの修正に進むことができます。これを行い、

コミットの前にファイルのバージョンを復元します!これは重要です。誤ったコミットでファイルを再開する代わりに、最後の良い状態、つまりコミットの前に復元します! 間違ったコミットのハッシュ値に-p

に参加すると、GITに次のことを行うように指示します。
<code class="language-bash">$ git log -- index.html</code>
このコマンドを実行した後、

があなたのローカルワーキングコピーで変更されていることがわかります。GITは、ファイルの最後の良いバージョンを復元しました! reflog

を使用して失われたバージョンを回復します
<code class="language-bash">$ git log -p -- index.html</code>
Git First Aid Kitのもう1つの強力な元気ツールは「Reflog」です。 gitがローカルリポジトリで発生するすべてのヘッドポインターの動きを記録するログと考えることができます。より重要な操作はすべてここでよく記録されます!

もちろん、そのようなログは、物事がうまくいかない状況に最適です。それでは、最初に小さな災害を作成しましょう - それから私たちはそれをリフェログで修正することができます。

最後の数人のコミットが良くないと確信しているとします。それらを取り除きたいので、前のバージョンに戻るために

を使用します。その結果、「エラー」のコミットは、あなたのコミット履歴から消えました - あなたが望むように。 git reset

5 Ways to Undo Mistakes with Git

しかし、人生がするように、あなたはそれが悪い考えであることに気付くでしょう:最終的に、これらの提出物はそれほど悪くはありません!しかし、悪いニュースは、リポジトリのコミット履歴からそれらを削除したことです! ?

5 Ways to Undo Mistakes with Git

これは、Gitのリフェログツールの古典的なケースです!それがどのようにあなたを救うか見てみましょう:

<code class="language-bash">$ git restore css/general.css</code>

5 Ways to Undo Mistakes with Git

1つずつ分解しましょう

まず、リフェログは非常に簡単に開くことができます。単純な
    で十分です。
  • git reflog第二に、記録されたステータスは年代順にソートされており、最新のステータスが上部にあることに気付くでしょう。
  • よく見ると、トップ(つまり、最新の)プロジェクトが「リセット」操作であることがわかります。これはまさに20秒前にやったことです。明らかに、このログは有効ですか?
  • 今すぐ意図しない「リセット」を元に戻したい場合は、以前の状態に戻ることができます。これもここにも十分に文書化されています。その前の状態のコミットハッシュをクリップボードにコピーして、そこから開始するだけです。
  • この前の状態を復元するには、
  • を再度使用するか、単に新しいブランチを作成できます。

git reset

喜んで確認できるように、私たちの新しい支店には、予期しない
<code class="language-bash">$ git restore -p index.html</code>
の失敗によって失われたと思われるコミットが含まれています!

5 Ways to Undo Mistakes with Git 削除されたブランチを回復します

リフェログは、他の状況でも役立つことがあります。たとえば、誤って削除してはならないブランチを誤って削除する場合。例のシナリオを見てみましょう:git reset

クライアント/チームリーダー/プロジェクトマネージャーが、開発してきた美しい分析はもはや必要ないと言っていると仮定しましょう。私たちはよく整理されており、もちろん、対応する

ブランチを削除します!

上記の上記のシナリオの例では、現在、ブランチをチェックアウトしていることがわかります。削除できるようにするには、まず別のブランチに切り替える必要があります。

<code class="language-bash">$ git restore css/general.css</code>

gitは、非常に深刻なことをしようとしていることを教えてくれます。feature/analyticsは他の場所に存在しないユニークなコミットが含まれているため、削除すると(おそらく価値のある)データが破壊されます。 OK ...この機能は不要になったため、続行できます:

<code class="language-bash">$ git restore -p index.html</code>

次に何が起こるかを期待していたかもしれません。クライアント/チームリーダー/プロジェクトマネージャーは、機能が戻ってきたことを喜んで教えてくれます。 ? ?

同様に、貴重なデータを失った可能性のある悪い状況に直面しています!それで、リフェログが再び私たちを救うことができるかどうか見てみましょう:

<code class="language-bash">$ git log -- index.html</code>

5 Ways to Undo Mistakes with Git

よく見ると、良いニュースが明らかになります。ブランチを削除できる前に(悲惨な)ブランチを削除できるようにする前に、別のブランチに切り替えるにはgit checkoutを実行する必要があります(GITで現在のブランチを削除できないため)。もちろん、このチェックアウトもリフェログに記録されています。削除したブランチを復元するには、新しいブランチの出発点としての前にの状態を単に使用できるようになりました。

<code class="language-bash">$ git log -p -- index.html</code>
見てください:私たちの枝が生き返りました! ???

タワーのようなデスクトップGUIを使用している場合、そのようなエラーを元に戻すことは通常、

cmdzを押すのと同じくらい簡単です。

5 Ways to Undo Mistakes with Git

異なる枝にコミットを移動します

最後に、「ああ、いいえ!」の古典的なケースを見てみましょう。

今日、多くのチームは、「メイン」、「マスター」、「開発」などの長期的な支店への直接的な提出を禁止する規則を策定しています。通常、新しいコミットは、マージ/リベースによってのみこれらのブランチに到達する必要があります。ただし、忘れて直接送信することもあります...

次のシナリオを例として見てみましょう。

5 Ways to Undo Mistakes with Git

で提出する必要がありましたが、feature/newsletterブランチでのコミットを不注意に引き起こしました。ソリューションを段階的に見てみましょう。 master

まず、今回は正しいブランチにいることを確認する必要があるので、

feature/newsletterをチェックしています。

<code class="language-bash">$ git checkout <bad-commit-hash>~1 -- index.html</bad-commit-hash></code>

コマンドを使用して、コミットを安全に移動できます。 cherry-pick

<code class="language-bash">$ git reflog</code>
を確認できますが、コミットがここにも存在することがわかります。

feature/newsletter

これまでのところ、すべてがうまくいきました。ただし、cherry-pickmasterブランチからコミットを削除しません(永遠にはそこにないはずです)。だから私たちもそこで混乱をきれいにしなければなりません:

<code class="language-bash">$ git restore css/general.css</code>

に戻り、masterを使用して、歴史から不要なコミットを削除します。 git reset

終わり、すべてが普通に戻ったので、あなたは今あなたの幸せなダンスを始めることができます! ???

ロック解除エラーは超大国です

私は前にそれを言ったが、残念ながら私たちは皆、それが真実であることを知っている:エラーを避けることはできない!私たちがプログラマーであっても、私たちは時々それを台無しにします。ですから、問題は、間違いを犯すかどうかではなく、どのように効果的に処理し、問題を解決するのかということです。

Git Undo Toolsの詳細については、「Git First Aid Kit」を強くお勧めします。これは、Gitのエラーをクリーンアップして元に戻す方法を示す(無料の)短いビデオコレクションです。 スムーズな発達、試してみる勇気をお祈りします。もちろん、修理が得意でなければなりません! GITを使用してエラー(FAQ)を元に戻すことについてのFAQ

の違いは何ですか?

およびは、GITリポジトリの変更を取り消すのに役立つ2つのコマンドですが、動作は異なります。

ヘッドポインターを特定のコミットに移動します。これは、実際にコミットにリセットされた後、すべてのコミットを「忘れた」ことを意味します。これは破壊的な操作であり、注意して使用する必要があります。一方、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。