gitの仕組みを理解する

8069 ワード

この記事では、Gitの最も一般的に使用される機能の実用的な理解を得るのに役立ちます.これらの概念のしっかりした把握を持つことは、あなたが一般的な間違いを避けるのを助けて、さらにより効率的にgitを使います.
初心者のために、それは最初から最後まで記事を読むことをお勧めします.経験豊富なユーザーは、リファレンスガイドとして使用することができます.

Gitとは


公式Gitウェブサイトは、それを定義します

Git is a free and open-source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. Git is easy to learn and has a tiny footprint with lightning-fast performance.


なぜGitを使うべきですか?
  • Gitは、それらに導かコミットを検査してバグを追跡することができます.
  • CI/CDパイプライン経由でコードの展開を自動化し、各コミットが新しいビルドをトリガーします.
  • Gitはあなたのファイルの変更を追跡し、時間をかけて自分のバージョンを管理することができます.
  • あなたのコードが特定の標準またはスタイルガイドに付着することを保証する前コミットフックを持つことができるコード品質保証.
  • 構造


    GitプロジェクトはRepository , エーWorking Tree , とStaging Area .

    どのようにgitは動作しますか?


    ファイルはgitで処理されるこれらのステップを通過しなければなりません

    作業木


    gitのth th work treeは、すべてのファイル(トラックと追跡されていない)を含んでいる.すべてのファイルとサブディレクトリは、ステージング領域に追加される資格があります.
    作業木の変更はindex Gitで.

    ステージングエリア


    これは、作業ツリーからファイルがstaging area . Gitはこのファイルを認識し、変更を追跡します.

    歴史


    コミットログとヘッドは、最新のコミットを指します.

    GITリポジトリ


    として知られているGIT倉庫repo プロジェクトのコンテナーです.新しいGit倉庫を初期化することは、隠れたディレクトリをつくります.git/ プロジェクト内では、すべての変更を追跡することができますし、様々なを使用して作業を管理することができますcommands .
    訪問することをお勧めします./git Gitがどのように表現し、ファイルを管理するかを理解するためのディレクトリとナビゲーション
    おそらく次のオブジェクトに遭遇するでしょうHEAD , index , logs , and packed-refs.git/ ディレクトリ.
    GITリポジトリの初期化
    git init
    
    
    Gitの分散された性質は、あなたにローカルのコピーとAを持っている各々で、同じプロジェクトで他と協力する能力を与えますremote すべての協力者の間で常に同期されているコピー.
  • エーLocal Repository .
  • Aとして知られているリモートリポジトリremote .
  • 作業木


    ワーキングディレクトリは、現在作業中のファイルから構成されます.作業ツリーをファイルを表示したり変更したりできるファイルシステムと考えることができます.
    作業ツリーは、現在取り組んでいるファイルから成ります.ファイルは通常、.git/ フォルダ.

    インデックス


    また、ステージング領域として知られている.インデックスは、作業ツリー内のファイルをRepo内のファイルと比較します.作業ツリーの変更を行うと、インデックスはファイルがコミットされる前に変更されます.

    GITの状態


    Gitのファイルは、4つのステージのうちの1つでありえました
    次のコマンドを実行して、リポジトリの状態を表示できます.
    git status
    
    

    追跡できない


    ワーキングディレクトリに存在するが、まだ行われていない.

    段階的な


    現在ステージングエリアではまだコミットされていません.

    修正


    ステージングエリアに追加されているが、変更の対象となった.アイテムはすべての変更後にステージング領域に再追加する必要があります.

    コミット


    ファイルがコミットされ、リモートブランチにプッシュすることができます.

    Gitでコミットする


    コミットは何のスナップショットですかworking tree 当時のように見えた.コミットは./git/objects/ ディレクトリ.
    コミットはSha1 以下の情報を含むハッシュ.
  • 著者
  • 日付
  • メッセージ
  • 配布する
    Gitの配布は、誰もが自分自身を取得することを意味しますversion to control . すべての変更はユーザーが明示的に共有していない限り、ローカルですmerged などのバージョン管理プロバイダーを使用するGithub or Gitlab .
    分散バージョン管理システムは、協調的にファイルへの変更を追跡できるシステムです.
    これは、同じプロジェクトで他のユーザーと協力することができます.Gitという機能を提供するbranching あなたの仕事を切り離すために、それは一般的にメイン以外の異なった枝で働くことを勧めます.

    Gitの分岐


    gitブランチはツリーの枝に似ています.それは同じ倉庫に属しますが、異なるデータを含むかもしれません.あなたは新しい枝などを作成することができます!ブランチはreferences .

    リモートリポジトリ


    Gitのリモートは、すべてのチームメンバーが彼らの変更を交換するのに使用する一般的なリポジトリです.ほとんどの場合、そのようなリモートリポジトリは、githubや内部サーバのようなコードホスティングサービスに格納されます.ローカルリポジトリとは対照的に、リモートは通常、プロジェクトの現在の状態のファイルツリーを提供しません.
    リモートリポジトリで動作するようにgitをサポートするバージョン管理プロバイダーが必要です.GitlabとGitthubは人気のあるオプションです.
    リモートリポジトリは有用です.
  • 他のユーザーとコードを共有する.
  • プロジェクトのコラボレーション.
  • 他の人々のプロジェクトに貢献すること.
  • あなた自身のリモートレポを作成したり、既存のレポを使用して、私は両方を行う方法を示します.
    リモートリポジトリを作成すると、次のコマンドを実行してリモートを作成します
    git remote add <origin>< https://github.com/user/repo.git>
    
    
    このコマンドは
  • 名前origin この場合は
  • URLはリモートリポジトリの場所を指します.
  • 既存のリモートリポジトリを使用するには、一般的に2つの方法があります.プロジェクトをクローンしたり、コードを直接プッシュすることもできます.その中に書き込みを許可したり、プロジェクトをフォークしたり、貢献したりすることによって、Gitワークフローを使用したりできます.

    クローニング


    git clone <origin>< https://github.com/user/repo.git>
    
    
    これは、このリポジトリのコピーをあなたのマシンに作成します.

    フォーキング


    他人のリポジトリへの貢献
    git clone <origin>< https://github.com/user/repo.git>
    
    

    同期滞在


    プロジェクトに協力するとき、同期しているのが重要です、そして、Gitはそれをするために異なる方法を提供します.
    我々は、同期であなたの仕事を保つために2つの戦略を見ていきます.

    マージとリベース


    これらの2つの一般的な方法gitは、プロジェクトで他のユーザーとのコラボレーション時に同期してファイルを維持するために使用されます.

    合併する


    リモートリポジトリの変更をローカルブランチにプルします.あなたのステージング領域がマージしようとする前に明確であることを確認する必要があります.新しく追加された変更はmerge commit .

    ベース


    rebasingは一つのブランチから別のブランチへの変更を統合しています.

    インタラクティブ
    これはrebasingファイルのrebasingの種類ですgitの簡単なファイルは簡単なプロセスです.

    スカッシュ
    このコマンドを使用すると、最後にスカッシュすることができますn commits 一つのコミットに.あなたがきちんとしたコミット履歴を持ちたいならば、これは本当によいです.これは通常、最後のコミットメッセージを使用することをお勧めしますが、メッセージを完全にカスタマイズすることができます.
    
    commit 5b937deaf4f6ae6f2239a7ac488ece186ff573d3
    Author: `<Your Name> <[email protected]>`
    Date: Tue Dec 1 10:41:41 2020 +0000
    
    commit 5b937deaf4f6ae6f2239a7ac488ece186ff573d3
    Author: `<Your Name> <[email protected]>`
    Date: Tue Dec 1 10:41:41 2020 +0000
    
    commit 5b937deaf4f6ae6f2239a7ac488ece186ff573d3
    Author: `<Your Name> <[email protected]>`
    Date: Tue Dec 1 10:41:41 2020 +0000
    
    
    これはGitコマンドではなく、むしろRebaseを通して実装できる概念です.
    単一のメッセージにあなたのコミットメッセージのすべてを結合することによって、あなたのコミットログ/歴史クリーンを維持したいならば、このコマンドのための理想は役に立ちます.

    ゴットスタッシュ


    あなたがそれをコミットせずに仕事を保存することができます.あなたが実行して変更を隠してgit stash 現在アクティブなディレクトリ.
    stash popは最新の変更された変更を取得します.
    隠し場<n> どこn が終了した項目です.あなたの隠しリストから特定の変更を適用します.私はまだこのアイデアを使用するときには、まだアイデアをローカルで実験をしながらレビューのコードをプッシュする必要があります.

    理想的な

  • ローカルで考えを実験すること.
  • その他のgitコマンド

  • Amend
  • Revert
  • Cherry Pick
  • 償還する


    gitコマンドを編集できませんSha1 hashには、作成者と作成日などのコミット関連メタデータが含まれます.
    コミットを修正することは、新しいメッセージを使ってコミットされた新しいコピーを作成することを意味します.
    git amend -m commit.
    
    

    反転する


    The git commit --amend あなたの最後のコミットを編集することができます.

    隠し


    The git stash コマンドで変更を保存できます.

    より良いコミットメッセージの書き込み

  • タスクに関連する記述名をコミットアドレスを追加します.コミットの名前はコミットの理由を要約する必要があります.
  • アクティブな音声、簡単な説明を使用します.
  • 私は以下の通りConventional Commits Spec , メッセージをコミットするために人間とマシンで読みやすい意味を追加するための仕様.
  • コミットメッセージを事前にタグで固定されてfeat: , fix: 隠そうとする.

    資源

  • 公式GITドキュメント
  • Git Tower