|
この記事はWeChat公式アカウント「sowhat1412」から転載されたものです。著者はsowhat1412です。転載の許可については、sowhat1412公式アカウントまでお問い合わせください。 Git マインドマップ Git作業領域日々の開発で実行する一連のGitコマンドの目的を説明するには、Gitの作業領域の概念を理解する必要があります。ほぼすべての一般的なGitコマンド操作は、作業領域を通して説明できます。 Git には 4 つのローカル作業領域があります。
4つの作業領域 Gitファイルのステータス次に、Git ファイルの状態を見てみましょう。 Gitファイルのステータス
Gitの基本コマンドGitの作業領域、ファイルの状態、ローカルリポジトリについて理解できたので、よく使われるコマンドについてより深く理解できたはずです。次に、よく使われるコマンドをいくつかまとめてみましょう。
一人で開発するプロジェクトであれば、これらのコマンドで十分でしょう。しかし、実際の開発では、より複雑なシナリオに直面することが多く、より複雑なコマンドが必要になります。それでは、続きを見ていきましょう。 git マージ現在のブランチで `git merge master` を実行すると、master のコミットが現在のブランチにマージされ、実質的にはローカルブランチが更新されます。私たちの日常的な開発では、ローカルコードをリモートリポジトリにプッシュし、マージリクエストを作成して「マージ」ボタンをクリックすることで、実質的には開発ブランチが master ブランチにマージされます。 git フェッチ `git fetch` はリモート ブランチをローカル マシンにプルできます。 `git fetch` はすべてのリモート ブランチをローカル マシンにプルします。 `git fetch origin sowhat1412` は、リモート `origin` リポジトリからの `sowhat1412` ブランチをローカル マシンに取得することを指定します。 git プル ローカルブランチのコードを更新するには、リモート開発ブランチまたはリモートマスターブランチからコードをローカルマシンにプルし、現在の開発ブランチにマージする必要があります。つまり、`git pull` は `git fetch` + `git merge` と同じ意味になります。 現在の開発ブランチ sowhat1412 で、次のコマンドを実行します。
git リベース リベースは、現在のブランチのコミットを公開ブランチの末尾に配置するため、「リベース」と呼ばれます。これは、公開ブランチから新しいブランチをプルするようなものです。 例えば、master から機能ブランチを作成し、いくつかのコミットを行った後、誰かがその作業を master にマージすると、master にはブランチ作成時よりもいくつかのコミットが追加されます。この時点で master をリベースすると、現在のコミットはその人のコミットの後に配置されます。 git rebeae マージは、パブリック ブランチと現在のコミットを結合して新しいコミットを形成します。
git マージ git チェリーピック 複数ブランチのコードベースでは、あるブランチから別のブランチにコードを移動することが一般的な要件です。 ここでは2つのシナリオが考えられます。1つは、別のブランチのすべてのコード変更が必要な場合で、この場合は `git merge` を使用します。もう1つは、一部のコード変更(数個のコミット)のみが必要な場合で、この場合は `Cherry pick` を使用します。 `git cherry-pick` コマンドの目的は、指定されたコミットを他のブランチに適用することです。
上記のコマンドは、指定されたコミットハッシュを現在のブランチに適用します。これにより、現在のブランチに新しいコミットが作成されますが、そのハッシュ値は異なります。 たとえば、コード リポジトリには、master と feature の 2 つのブランチがあります。
次に、f をマスター ブランチにコミットします。
上記の操作を完了すると、コードベースは次のようになります。
上記のように、コミット「f」がマスター ブランチの最後に追加されました。 `git cherry-pick` コマンドの引数は、必ずしもコミットのハッシュである必要はありません。ブランチ名も許容され、そのブランチの最新のコミットを移動する必要があることを示します。
Cherry Pick は、複数のコミットを一度に転送することをサポートします。
一連の連続したコミットを移動する場合は、次の簡略化された構文を使用できます。
上記のコマンドは、すべてのコミットを A から B に転送できます。コミットは正しい順序で配置する必要があります。コミット A はコミット B より前になければなりません。そうでない場合、コマンドは失敗しますが、エラーは報告されません。 上記のコマンドを使用すると、コミットAはCherry Pickに含まれないことに注意してください。コミットAを含めるには、次の構文を使用してください。
git リセット
git reflog git-test という名前の新しいディレクトリを作成し、リポジトリを初期化して、簡単なコミットを行います。
過去数週間で 3 つの重要なコードコミットを行ったとします。
この時点で、突然うっかりミスをして `git reset` コマンドを使用したとします。
コードを見てみましょう:
これを改善する方法はあるのでしょうか?答えは「はい」です! git reflog を使って確認してみましょう。
HEAD の動きとそのハッシュ値が毎回明確にわかるので、`git reset` を使ってみましょう。
コードを見てみましょう:
この時点で、`git log` または `git log --pretty=oneline` を使用すると、履歴全体が復元されたことが示されます。 git を元に戻す `revert` は、以前のコミットではなく、特定のコミットをロールバックします。`git revert` は、特定のバージョンで行われた変更を元に戻すために使用されます。例えば、3つのバージョン(バージョン1、バージョン2、バージョン3)をコミットした後、バージョン2に不具合(バグなど)があることが突然発見され、バージョン3の元に戻す処理に影響を与えずにバージョン2を元に戻したい場合、`git revert` コマンドを使用してバージョン2を元に戻し、新しいバージョン4を生成します。このバージョン4はバージョン3の変更を保持しますが、バージョン2の変更は元に戻されます。下の図を参照してください。 プロセスを元に戻すには、「git revert -n バージョン番号」コマンドを使用します。次のコマンドはバージョン番号8b89621を元に戻します。
ここで競合が発生する可能性があるため、競合するファイルを手動で変更する必要があります。また、変更をコミットするには `git add filename` を使用する必要があります。
コミットを手動で整理するコード量は少ない要件があるのに、コミットが複数回行われたため、マージリクエストには「更新」「バグ修正」「再修正」といった数十ものコミットIDが付けられてしまいます。見た目が醜いだけでなく、開発者の能力不足を印象づけてしまいます。100行のコードを完成させるのに、これほど多くのコミットが必要でした。(awkward.jpg) この問題を解決するには、`git reset` を巧みに活用します。例えば、現在のコミットが A-1-2-3-4-5-6-7-8 で、最初のコミットが 1 の場合、以下のコマンドを実行します。
`-f` とはどういう意味でしょうか?これは「強制」を意味し、操作を必ず実行する必要があることを示します。`git reset` を実行すると、ローカルの HEAD ポインタが指すコミット ID はリモートの `origin` ブランチのコミット ID よりも後ろになり、直接プッシュは拒否されます。`-f` コマンドは、ローカルのコンテンツをリモートブランチに強制的にプッシュすることができます(注意!共同開発ブランチやリモートの `master` 操作の場合は、絶対に `-f` を追加しないでください!)。 `git reset --soft` を使用した後、マージ リクエストに commitId が含まれるようになり、送信された CR がより印象的なものになります。 Git stash 一時ストレージ現在のブランチで機能を開発している際に、別の機能の統合テスト中に問題が発生し、別のブランチに切り替えて問題を解決する必要が生じました。どうすればよいでしょうか? 通常、ブランチを切り替える前に、現在のブランチの作業ディレクトリの内容を追加してコミットする必要があります。しかし、ここで問題があります。機能の開発がまだ途中であり、コミットを生成したくない場合はどうすればよいでしょうか? 心配しないでください。`git stash` コマンドを使えば、現在の作業ディレクトリの内容をスタッシュできます。その後、別のブランチに切り替えて問題を解決し、現在のブランチに戻って `git stash pop` で内容を取得できます。
Gitで変更されたファイルを復元する変更されたファイルを復元するには、リポジトリからローカル作業領域(つまり、リポジトリ領域 -> ステージング領域 -> 作業領域)にファイルを移動する必要があります。 変更されたファイルには 2 つのシナリオがあります。
参照する Git ハードマップのトップ 10: https://zhuanlan.zhihu.com/p/132573100 Git ブランチガイドライン: https://zhuanlan.zhihu.com/p/108385922 Git マインドマップ: https://www.jianshu.com/p/e2f553942317 |