写真と文章で詳しく解説! Git の仕組みを理解する
この記事では、Git の動作原理について、主に画像と文章で詳しく説明することで関連知識を提供します。
git の仕組みの説明
この記事では、Git で最も一般的に使用されるコマンドを説明します。 Git の仕組みを少しでも理解している場合は、この記事を読むことでより完全に理解できるようになります。
上記の 4 つのコマンドは、作業ディレクトリ、ステージング ディレクトリ (インデックスとも呼ばれます)、およびウェアハウスの間でファイルをコピーします。
git add files は、現在のファイルをステージング領域に配置します。
git commit は、ステージング領域のスナップショットを生成し、送信します。
git replace – files は、最後の git add ファイルを元に戻すために使用されます。また、git restart を使用して、すべての一時領域ファイルを元に戻すこともできます。
git checkout – files は、ファイルをステージング領域から作業ディレクトリにコピーして、ローカルの変更を破棄します。
git replace -p、git checkout -p、または git add -p を使用して対話モードに入ることができます。
ステージング領域をスキップして、ウェアハウスからファイルを直接取得したり、コードを直接送信したりすることもできます。
git commit -a は、git add を実行して、現在のディレクトリ内のすべてのファイルをステージング領域に追加して実行するのと同じです。
git commit files最後のコミットと作業ディレクトリ内のファイルのスナップショットを含むコミットを作成します。そして、ファイルがステージング領域に追加されます。
git checkout HEAD – ファイルをロールバックして最後のコミットをコピーします。
以下の本文では、以下の形式で画像を使用しています。
#緑の 5 桁の文字は送信された ID を表し、それぞれ親ノードを指します。ブランチはオレンジ色で表示され、特定のコミットを指します。現在のブランチは、それに接続されている HEAD によって識別されます。この写真は過去 5 件の提出物を示しています。ed489 が最新の提出物です。 master ブランチはこのコミットを指し、もう 1 つの maint ブランチは祖父母コミット ノードを指します。
Diff
コミット間の変更を表示するにはさまざまな方法があります。ここではいくつかの例を示します。
コミット
送信するとき、Git はステージング領域内のファイルを使用して新しい送信を作成し、その時点でノードを配置します。親ノードとして設定します。次に、現在のブランチが新しいコミット ノードを指すようにします。下の図では、現在のブランチがマスターです。コマンドを実行する前、マスターは ed489 を指しますが、送信後、マスターは ed489 を親ノードとする新しいノード f0cec を指します。
#現在のブランチが特定の送信の親ノードである場合でも、git は同じように動作します。以下の図では、master ブランチの祖父ノードである maint ブランチでコミットが行われ、1800b が生成されます。このようにして、maint ブランチは master ブランチの祖父母ではなくなります。このとき[1]のマージ(または[2]のリベース)が必要です。
コミットを変更する場合は、 git commit –amend を使用します。 Git は現在のコミットと同じ親ノードを使用して新しいコミットを作成し、古いコミットはキャンセルされます。
もう 1 つの例は、HEAD サブミッション [3] を分離することです。これについては後で説明します。
Checkout
Checkout コマンドは、履歴送信 (またはステージング領域) から作業ディレクトリにファイルをコピーするために使用され、ブランチを切り替えるためにも使用できます。
ファイル名が指定されている場合 (または -p オプションがオンになっている場合、またはファイル名と -p オプションが同時にオンになっている場合)、Git は指定されたコミットからファイルをコピーします。ステージング領域と作業ディレクトリ。たとえば、 git checkout HEAD~ foo.c は、コミット ノード HEAD~ (つまり、現在のコミット ノードの親ノード) にある foo.c を作業ディレクトリにコピーし、ステージング領域に追加します。 (コマンドでコミット ノードが指定されていない場合、コンテンツはステージング領域からコピーされます。) 現在のブランチは変更されないことに注意してください。
ファイル名が指定されていないが、(ローカル) ブランチが指定されている場合、HEAD 識別子はそのブランチに移動され (つまり、そのブランチに「切り替え」られます)、その後ステージング領域と作業ディレクトリが移動されます。のコンテンツは、HEAD に対応する送信ノードと一致します。新しい送信ノード (下図の a47c3) 内のすべてのファイルが (ステージング領域と作業ディレクトリに) コピーされます。古い送信ノード (ed489) にのみ存在するファイルは削除されます。上記 2 つのファイルは無視され、影響を受けません。
ファイル名もブランチ名も指定されていないが、タグ、リモート ブランチ、SHA-1 値、または master~3 などの類似したものが指定されている場合、匿名の名前が返されます。切り離された HEAD と呼ばれるブランチ (切り離された HEAD 識別子)。これにより、過去のバージョン間の切り替えが簡単になります。たとえば、Git のバージョン 1.6.6.1 をコンパイルする場合は、git checkout v1.6.6.1 (これはブランチ名ではなくラベルです) を実行し、コンパイルしてインストールし、別のブランチに切り替えることができます。 git チェックアウト マスターとして。ただし、コミット操作に「切り離された HEAD」が含まれる場合、以下で詳しく説明するように、動作が若干異なります。
公開アカウント「Java Backend Technology Full Stack」をフォローしてインタビューに返信すると、質の高いインタビュー資料が入手できます
HEAD ロゴがデタッチ状態にある コミット操作
HEAD がデタッチ状態 (ブランチにアタッチされていない) の場合、コミット操作は通常どおり続行できますが、名前付きブランチは更新されません。 (これは匿名ブランチの更新と考えることができます。)
マスターなどの別のブランチに切り替えると、このコミット ノードは (おそらく) 存在しなくなります。 available 参照されず破棄されます。このコマンドの後は、2eecb を参照するものは何もないことに注意してください。
ただし、この状態を保存したい場合は、コマンド git checkout -b name を使用して新しいブランチを作成できます。
Reset
Reset コマンドは、現在のブランチを別の場所にポイントし、オプションで作業ディレクトリとインデックスを変更します。作業ディレクトリに触れることなく、履歴リポジトリからインデックスにファイルをコピーするためにも使用されます。
オプションが指定されない場合、現在のブランチはそのコミットを指します。 -hard オプションを使用すると作業ディレクトリも更新され、-soft オプションを使用すると変更されません。
サブミッション ポイントのバージョン番号が指定されていない場合は、デフォルトで HEAD が使用されます。この方法では、分岐点は変更されませんが、インデックスは最後のコミットまでロールバックされ、–hard オプションが使用されている場合、作業ディレクトリは同じになります。
ファイル名 (または -p オプション) を指定した場合、インデックスが更新されることを除いて、動作効果はファイル名を使用したチェックアウトと同様です。
Merge
Merge コマンドは、異なるブランチをマージします。マージする前に、インデックスは現在のコミットと同じである必要があります。別のブランチが現在のコミットの親である場合、マージ コマンドは何も行いません。別の状況としては、現在のコミットが別のブランチの親である場合があり、早送りマージが発生します。ポインタは単純に移動され、新しいコミットが生成されます。
それ以外の場合は、実際のマージとなります。デフォルトでは、現在のコミット (以下に示す ed489) と別のコミット (33104) およびそれらの共通の祖父母ノード (b325c) の間で 3 方向のマージが実行されます [4]。その結果、まず現在のディレクトリとインデックスが保存され、次に親ノード 33104 とともに新しいコミットが作成されます。
チェリーピック
チェリーピックコマンドはコミットノードを「コピー」し、現在のブランチ上に同一の新しいコミットを作成します。 。
リベース
リベースは、コマンドをマージする代わりの方法です。 Merge は 2 つの親ブランチを 1 つのコミットにマージしますが、コミット履歴は直線的ではありません。リベースでは、現在のブランチ上の別のブランチの履歴が再生され、コミット履歴は線形です。本質的に、これは線形化された自動チェリーピッキングです。
上記のコマンドはすべて、master ブランチではなくトピック ブランチで実行され、master ブランチ上で繰り返され、ブランチが新しいノードを指すようになります。古いコミットは参照されず、リサイクルされることに注意してください。
ロールバック範囲を制限するには、-onto オプションを使用します。次のコマンドは、master ブランチ (2c33a) 上の 169a6 以降の現在のブランチの最後の数コミットを再生します。
git rebase –interactive もあります。これを使用すると、コミットの破棄、再配置、変更、マージなどの複雑な操作をより簡単に実行できます。これを示す画像はありません。詳細については、ここを参照してください: git-rebase(1)[5]。
ファイルの内容は実際にはインデックス (.git/index) や送信オブジェクトに保存されませんが、BLOB の形式でデータベース (.git/objects) に保存され、 SHA-1値のテスト。インデックス ファイルには、関連する BLOB ファイルとその他のデータが識別子とともにリストされます。送信の場合、それらはツリー形式で保存され、ハッシュ値によっても識別されます。ツリーは作業ディレクトリ内のフォルダーに対応し、ツリーまたはツリーに含まれる BLOB オブジェクトは対応するサブディレクトリおよびファイルに対応します。各サブミッションには、その上位レベルのツリーの識別コードが格納されます。
切り離された HEAD を使用して送信した場合、最後の送信は HEAD の reflog によって参照されます。ただし、しばらくすると無効になり、最終的には git commit –amend や git rebase と同様にリサイクルされます。
推奨学習: 「Git チュートリアル 」
以上が写真と文章で詳しく解説! Git の仕組みを理解するの詳細内容です。詳細については、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)

ホットトピック











GITコードを更新する手順:コードをチェックしてください:gitクローンhttps://github.com/username/repo.git最新の変更を取得:gitフェッチマージの変更:gitマージオリジン/マスタープッシュ変更(オプション):gitプッシュオリジンマスター

GITコミットは、プロジェクトの現在の状態のスナップショットを保存するために、ファイルの変更をGITリポジトリに記録するコマンドです。使用方法は次のとおりです。一時的なストレージエリアに変更を追加する簡潔で有益な提出メッセージを書き込み、送信メッセージを保存して終了して送信を完了します。

gitを介してローカルにプロジェクトをダウンロードするには、次の手順に従ってください。gitをインストールします。プロジェクトディレクトリに移動します。次のコマンドを使用してリモートリポジトリのクローニング:git clone https://github.com/username/repository-name.git

解決:gitのダウンロード速度が遅い場合、次の手順を実行できます。ネットワーク接続を確認し、接続方法を切り替えてみてください。 GIT構成の最適化:ポストバッファーサイズ(Git Config -Global HTTP.Postbuffer 524288000)を増やし、低速制限(GIT Config -Global HTTP.LowsPeedLimit 1000)を減らします。 Gitプロキシ(Git-ProxyやGit-LFS-Proxyなど)を使用します。別のGitクライアント(SourcetreeやGithubデスクトップなど)を使用してみてください。防火を確認してください

gitリポジトリを削除するには、次の手順に従ってください。削除するリポジトリを確認します。リポジトリのローカル削除:RM -RFコマンドを使用して、フォルダーを削除します。倉庫をリモートで削除する:倉庫の設定に移動し、「倉庫の削除」オプションを見つけて、操作を確認します。

gitコードマージプロセス:競合を避けるために最新の変更を引き出します。マージするブランチに切り替えます。マージを開始し、ブランチをマージするように指定します。競合のマージ(ある場合)を解決します。ステージングとコミットマージ、コミットメッセージを提供します。

eコマースのウェブサイトを開発するとき、私は困難な問題に遭遇しました:大量の製品データで効率的な検索機能を達成する方法は?従来のデータベース検索は非効率的であり、ユーザーエクスペリエンスが低いです。いくつかの調査の後、私は検索エンジンタイプセンスを発見し、公式のPHPクライアントタイプセンス/タイプセンス-PHPを通じてこの問題を解決し、検索パフォーマンスを大幅に改善しました。

GITで空のフォルダーを送信するには、次の手順に従ってください。1。空のフォルダーを作成します。 2.フォルダーをステージング領域に追加します。 3.変更を送信して、コミットメッセージを入力します。 4。(オプション)変更をリモートリポジトリに押します。注:空のフォルダーの名前は開始できません。フォルダーが既に存在する場合は、git addを使用して追加する必要があります。
