gitインタラクティブベースの変更:開発効率を向上させるための強力なツール
GITバージョン制御は、最新の開発者のツールボックスで標準になっています。 commit
、push
、
git rebase -i
インタラクティブなリベースを使用して、古いコミット情報を編集し、不必要なコミットを削除し、複数のコミットを1つにマージし、それによりコミット履歴を最適化およびクリーンアップできます。 それをきれいで十分に構築されたコミット履歴と比較してください。プロジェクトのコードベースをより読みやすく、
およびを理解しやすくするのに役立ちます。これは、健康で永続的なプログラムの必要な部分です!
インタラクティブなベース変更はあなたのために何をすることができますか
インタラクティブなレベーゼは、コミット履歴を最適化してクリーンアップするのに役立ちます。多くの異なるユースケースをカバーしていますが、そのうちのいくつかは次のことを行うことができます。 他のいくつかのgitツールと同様に、「履歴を書き直す」ことをインタラクティブに再編成します。つまり、インタラクティブなリベース操作を使用して一連のコミットを操作する場合、コミット履歴のこの部分は
インタラクティブなリベースを使用する時期(およびそうでない場合)
インタラクティブなレベースは多くの異なるものに使用できますが、それらの基本的なワークフローは常に同じです。この基本的なメカニズムをしっかりと理解すると、インタラクティブなリベースは「複雑で神秘的な」雰囲気を失い、ツールボックスで貴重で使いやすいツールになります。
最初に答える必要があるのは、「コミット履歴のどの部分を動作させたいですか?」実用的な例を示しましょう。古いコミット情報を編集したいとします(これはまさに実際にやろうとしていることです)。
開始状況を以下の図に示します。インタラクティブな変更ベースを通じて古い提出情報を編集します。C2のコミット情報を変更できるようにするには、親のコミットでインタラクティブなリベースセッションを開始する必要があります(または以前に、必要に応じて)。この例では、C1をインタラクティブリベースセッションの出発点として使用します。
ステップ2:実際のセッションを開始してください!
フラグ(「インタラクティブ」にしたいことを示します)を使用し、基本的なコミットを提供します(上記の最初のステップで思いついた)。この例では、「頭の後ろに遅れをとった3つのコミット」というコミットを指定するために
を使用しました。または、特定のSHA-1ハッシュも提供することもできます。<code>$ git rebase -i HEAD~3</code>
ステップ3:gitに何をしたいかを伝えます-i
git rebase
インタラクティブなリベースセッションを開始した後、GITが一連のコミットをリストするエディターウィンドウが表示されます。 。 HEAD~3
提出物にのみ適用されます。これより古いコミットでは、インタラクティブなリベースを使用する必要があります!
git commit --amend
この例では、「インデックスの最適化マークアップ構造...」というタイトルの現在の提出のメッセージを編集したいとします。
(ヘッドコミットの後ろに3つのコミット、つまり、「Hading Headlines ...」というタイトルのコミット)を使用します。セッション: このコマンドを実行した後、お気に入りの編集者は、選択したばかりのコミットのリストを開いて表示します(基本的なコミットを提供することで)。
HEAD~3
リマインダー:これを行うように誘惑されるかもしれませんが、ここで提出情報は変更しません。 「操作キーワード」のみを使用して、対応する列の行をマークします。私たちの場合、コミットをオーバーライドしたい(つまり、コミット情報を変更したいが、残りのコミットを維持することを意味します)。
<code>$ git rebase -i HEAD~3</code>
標準
キーワードを優先アクションキーワード(「そのまま」を受け入れることを意味する)に置き換えたら、ウィンドウを保存して閉じるだけです。
これを行うと、現在のコミット情報とともに新しいエディターウィンドウが開きます。最後に、最初にやろうとしていることを行うことができます。この古いコミットメッセージを編集してください!
変更を加えてエディターウィンドウを保存して閉じた後、インタラクティブなリベースセッションが完了しました。私たちの提出情報が更新されました! ?
Interactive Rebaseを使用すると、必要のない(または望まない)歴史からの古いコミットを削除することもできます。最近の提出に誤って個人的なパスワードを含めることを想像してください。ほとんどの場合、そのような機密情報をコードベースに含めるべきではありません。
また、情報を削除して再度コミットするだけでは、実際に問題を解決することはありません。これは、パスワードが古いコミットとしてリポジトリに保存されていることを意味します。本当に欲しいのは、このデータをリポジトリから完全にきれいに削除することです!
最初にインタラクティブリベースセッションの基本的なコミットを決定します。少なくとも間違ったコミットの親のコミットから始める必要があるため、「最適化マークアップ構造...」を使用します。 今回は、
コマンドで特定のSHA-1ハッシュを使用したことに注意してください。もちろん、ハッシュをコミットすることに加えて、そのコミットを処理するためにを使用することもできます。
このコマンドを実行した後、再びコミットリストが表示されます。<code>$ git rebase -i HEAD~3</code>
git rebase -i
HEAD~2
アクションキーワードを使用して、不要なコミットを取り除きます。または、この特別な場合、エディターから行全体を削除するだけです。ウィンドウを保存および閉じるときに行が存在しなくなった場合(コミットを表します)、Gitは対応するコミットを削除します。
あなたが選択したものは何でも、エディターウィンドウを保存して閉じた後、リポジトリ履歴から送信が削除されます!
にマージします
インタラクティブなリベースの別のユースケースは、複数の個別のコミットを1つにマージしたい場合です。仕事の方法に飛び込む前に、いつ、またはなぜ価値があるのかを議論して数分間費やしましょう。 drop
この2つのコミットを1つのコミットに統合する方が意味があると仮定します。インタラクティブなリベースツールを使用して、これを行うことができます:
これまでのところ、何が起こっているのか慣れています。エディターウィンドウは、提出物のリストで開きます。 squash
<code>$ git rebase -i HEAD~3</code>
この場合、
操作キーワードを使用すると述べました。どのように機能するかについて知っておくべき重要なことが1つあります。キーワードでマークされた行は、すぐ上の行と融合します。 これは、例の
このウィンドウを保存および閉じた後、新しいウィンドウが開きます。これは、複数のコミットを組み合わせることで、もちろん新しいコミットを作成するためです。また、この提出には、他の提出と同様に、提出情報も必要です! squash
squash
上記のスクリーンショットに表示されているのは、Gitが私たちのために準備したものです。それは、対応する元のコミットの提出情報といくつかのコメントを組み合わせています。古いメッセージを自由に削除してやり直してください。または、それらを保持して情報を追加してください。 squash
このエディターウィンドウを保存して閉じた後、誇らしげに言うことができます。以前は2つの別々のコミットでしたが、今では1つのコミットです!
Gitのインタラクティブなリベースツールが非常に価値があることに同意していただければ幸いです。開発者として、私たちはクリーンで明確なコミット履歴を求めて努力しなければなりません。これは、コードベースを健康で理解しやすい状態に保つための重要な要素です(チームメイトとあなた自身のために、しばらくしてからです)。
もっと知りたい場合は、「Git First Aid Kit」を強くお勧めします。これは、Gitのエラーをクリーンアップして元に戻す方法を示す(無料の)短いビデオコレクションです。
楽しんでください!
Git RebaseとGit Mergeは、あるブランチから別のブランチに変更を統合する2つの異なる方法です。 Git Mergeは、2つの異なるブランチからコードを直接結合する方法です。それは歴史に新しいコミットを生み出し、コミットの時系列秩序を維持します。一方、Git Rebaseは、一連のコミットを新しい基本的なコミットに移動または組み合わせる方法です。 「私は自分の変化に他の人の仕事を追加したい」と言っているようなものです。言い換えれば、別のブランチの上部にある現在のブランチに変更を配置できます。
Git Rebaseを元に戻す場合は、コマンドを使用して、返信するコミットを見つけて、コマンドgit reflog
を使用できます。 git reset --hard HEAD@{number}
コマンドには、ヘッドに作成された各変更のリストが表示され、git reflog
コマンドを使用すると、現在の頭を指定された状態に設定できます。 git reset
Git Interactive Variable-Base圧縮提出の使用方法は?
コマンドを使用してコミットを圧縮できます。 Open Text Editorでは、git rebase -i
pick
Git Interactive Rebaseを使用するリスクは何ですか? squash
s
Git Interactive Rebaseは強力なツールですが、不適切に使用すると危険になります。それはコミット履歴を書き直します。これは、他の人が扱っている公共支部を扱っている場合に問題を引き起こす可能性があります。まだプッシュされていないローカルブランチで使用することをお勧めします。
衝突は、リベースのプロセス中に発生する可能性があります。 GITは一時停止し、継続する前にこれらの競合を解決することができます。ファイルを編集して競合する変更を修正し、
を使用して解決されたファイルを追加して、競合を解決することができます。すべての競合が解決された後、はい、Git Interactive Rebaseを使用してコミットを小規模なコミットに分割できます。これは、1つのコミットで複数の変更を加えたが、それらが別々のコミットであるべきだと判断した場合に非常に便利です。
インタラクティブなリベース中に送信情報を編集できます。送信リストで、pick
またはreword
にr
またはreword
に置き換えて、編集する提出物をマークします。継続すると、GITは
Git pull
Git rebase
は、リモートリポジトリから変更を取得し、それらを現在のブランチにマージするコマンドです。一方、
はい、Git Interactive Rebaseを使用してコミットの順序を変更できます。コミットリストでは、行の順序を変更してコミットの順序を変更するだけです。これは、コミット履歴をより論理的またはより明確にしたい場合に非常に便利です。
以上が実用的な例を備えたGit Interactive Rebaseのガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。