ホームページ >テクノロジー周辺機器 >IT業界 >Gitで間違いを取り消す5つの方法
ソフトウェア開発は、どんなに経験があっても、間違いを犯すことは避けられません。しかし、優れたプログラマーと普通のプログラマーの違いは、彼らが veokeエラーを知っていることです!
GITをバージョン制御システムとして使用する場合、「元に戻すツール」の強力なセットが既にあります。この記事では、Gitでエラーを元に戻す5つの強力な方法を示します!
git restore
コマンドを使用して実行できます。詳細な制御をするには、-p
フラグを使用してパッチレベルで変更を破棄できます。 git log
コマンドを使用して、特定のファイルを特定のバージョンに復元できます。ユーザーは、破損したファイルの「エラーコミット」を識別し、git checkout
コマンドを使用して、間違ったコミットの前にファイルをバージョンに復元できます。 Reflog
ツールを使用して、紛失したバージョンまたは削除されたブランチを復元できます。 Reflog
ローカルリポジトリ内のすべてのヘッドポインターの動きを記録し、ユーザーが以前の状態に戻り、失われたデータを復元できるようにします。 git cherry-pick
コマンドを使用して、コミットを別のブランチに移動できます。コミットが間違ったブランチにある場合、ユーザーは正しいブランチをチェックアウトし、過去のコミットを移動してから、git reset
を使用して、元のブランチから不要なコミットを削除できます。 エンコーディングプロセスは通常混乱しています。時々、それは2歩前進し、一歩後退するように感じます。言い換えれば、あなたが書くコードのいくつかは素晴らしいです...しかし、いくつかはそうではありません。これは、Gitが役立つ場所です。これにより、良い部分を維持し、必要のない変更を破棄できます。
いくつかの「ローカル」の変更(つまり、まだ提出されていない変更)を含むサンプルシナリオを見てみましょう。
注:より良い概要とより明確な視覚化のために、いくつかのスクリーンショットでTower Gitデスクトップクライアントを使用しました。このチュートリアルを学ぶためにタワーは必要ありません。
最初にgeneral.css
で問題を解決しましょう。私たちが行った変更は、完全に間違った方向に進んでいました。すべての変更を元に戻して、ファイルの最後のコミットステータスを再作成しましょう:
<code class="language-bash">$ git restore css/general.css</code>
それに注意してください。または、git checkout
コマンドを使用して同じ結果を達成できます。しかし、git checkout
には多くの異なる用途と意味があるため、わずかに更新されたgit restore
コマンドを使用することを好みます(これらのタイプのタスクにのみ焦点を当てています)。
index.html
の2番目の質問は少し難しいです。このファイルで行った変更のいくつかは実際には良好であり、文書化されていないものの一部のみが必要です。
同じように、git restore
コマンドは問題を解決しますが、今回は
<code class="language-bash">$ git restore css/general.css</code>gitはあなたを導き、あなたに尋ねます - そのファイルのすべての変更について - あなたがそれを破棄したいなら。
最初のブロックの変更(維持するため)に「n」と2番目のブロックの変更(廃棄)の「y」と入力したことに気付くでしょう。プロセスが完了すると、貴重な変更の最初の部分だけが残っていることがわかります。
時々、
バージョンに復元することができます。たとえば、過去のある時点でがうまくいったことを知っていますが、今ではありません。この時点では、プロジェクト全体ではなく、この特定のファイルについてのみ戻りたいです!
最初に、復元する正確なバージョンを見つける必要があります。正しいパラメーターセットを使用して、個々のファイルの履歴をコマンドに表示できます。
index.html
git log
<code class="language-bash">$ git restore -p index.html</code>
詳細情報が必要で、これらのコミットのコンテンツを表示したい場合は、
フラグを使用して、これらのコミットの実際の変更を表示できます。
index.html
コミットの前にファイルのバージョンを復元します!これは重要です。誤ったコミットでファイルを再開する代わりに、最後の良い状態、つまりコミットの前に復元します!
間違ったコミットのハッシュ値に-p
<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
<code class="language-bash">$ git restore css/general.css</code>
まず、リフェログは非常に簡単に開くことができます。単純な
git reflog
第二に、記録されたステータスは年代順にソートされており、最新のステータスが上部にあることに気付くでしょう。 git reset
<code class="language-bash">$ git restore -p index.html</code>の失敗によって失われたと思われるコミットが含まれています!
削除されたブランチを回復します
リフェログは、他の状況でも役立つことがあります。たとえば、誤って削除してはならないブランチを誤って削除する場合。例のシナリオを見てみましょう: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>
よく見ると、良いニュースが明らかになります。ブランチを削除できる前に(悲惨な)ブランチを削除できるようにする前に、別のブランチに切り替えるにはgit checkout
を実行する必要があります(GITで現在のブランチを削除できないため)。もちろん、このチェックアウトもリフェログに記録されています。削除したブランチを復元するには、新しいブランチの出発点としての前にの状態を単に使用できるようになりました。
<code class="language-bash">$ git log -p -- index.html</code>見てください:私たちの枝が生き返りました! ???
タワーのようなデスクトップGUIを使用している場合、そのようなエラーを元に戻すことは通常、
cmdzを押すのと同じくらい簡単です。
今日、多くのチームは、「メイン」、「マスター」、「開発」などの長期的な支店への直接的な提出を禁止する規則を策定しています。通常、新しいコミットは、マージ/リベースによってのみこれらのブランチに到達する必要があります。ただし、忘れて直接送信することもあります...
次のシナリオを例として見てみましょう。
で提出する必要がありましたが、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-pick
はmaster
ブランチからコミットを削除しません(永遠にはそこにないはずです)。だから私たちもそこで混乱をきれいにしなければなりません:
<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 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 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 サイトの他の関連記事を参照してください。