Git 基礎概念#
Git 概念のまとめ#
概念 | 説明 |
---|---|
作業ディレクトリ(Workspace) | ローカルのコードリポジトリで、新規および変更されたファイルはステージにコミットされる |
ステージ(stage) | ファイルの変更を一時的に保存するためのもので、実際にはファイル(. Git/index)で、コミット待ちのファイルリストを保存 |
リポジトリ(repository) | Git の管理リポジトリで、ファイルの状態を記録する場所で、すべてのコードバージョンが含まれている |
リモートリポジトリ(origin/remote) | 専用の git サーバーで、複数人に共有サービスを提供する。ローカルのリポジトリは ==push== コマンドを使ってコードをリモートリポジトリにプッシュする |
ローカルリポジトリ | ローカルコンピュータ内で直接使用されるバージョンライブラリ |
ブランチ(Branch) | ブランチは主線から分離されたコピーで、独立して操作でき、主線に干渉しない。リポジトリが初期化されると、デフォルトの主ブランチ「master」または「main」が作成される |
HEAD(HEAD) | HEAD はポインタのようなもので、現在のアクティブブランチの最新バージョンを指す |
コミット(Commit) | ステージ内のすべての変更を現在のリポジトリのアクティブブランチにコミットする |
プッシュ(Push) | ローカルリポジトリのバージョンをリモートリポジトリにプッシュする |
プル(Pull) | リモートリポジトリから更新を取得してローカルリポジトリに反映する |
フェッチ(Fetch) | リモートリポジトリから更新を取得する。プルと同様の機能だが、自動的にマージは行わない |
コンフリクト(Conflict) | 複数人が同じファイルを変更した後、リモートリポジトリでマージする際に発生する衝突で、手動でのマージ処理が必要 |
マージ(Merge) | コンフリクトのあるファイルをマージする操作で、git は変更内容を自動的にマージできるが、自動処理できないファイルは手動で処理する必要がある |
タグ(Tag) | タグは特定のブランチの特定の時点の状態を指し、コミット記録の別名として理解でき、バージョンをマークするためによく使用される。 |
main/master | リポジトリのデフォルトの主ブランチ |
origin/main | リモートリポジトリの main ブランチを示す |
作業ディレクトリ / ステージ / リポジトリ#
- 図中の objects と表示されている領域は git のオブジェクトライブラリで、実際の位置は「. Git/objects」ディレクトリ内で、作成されたさまざまなオブジェクトと内容が含まれている
- 作業ディレクトリの変更 / 新規ファイルに対して git add コマンドを実行すると、ステージのディレクトリツリーが更新され、同時に作業ディレクトリの変更 / 新規ファイルの内容がオブジェクトの新しいオブジェクトに書き込まれ、そのオブジェクトの ID がステージのファイルインデックスに記録される
- git commit を実行すると、ステージのディレクトリツリーがオブジェクトに書き込まれ、main ブランチが更新される
- git reset HEAD コマンドを実行すると、ステージのディレクトリツリーが書き換えられ、master ブランチが指すディレクトリツリーに置き換えられるが、作業ディレクトリには影響しない。
- git rm --cached “file” コマンドを実行すると、ステージからファイルが直接削除され、作業ディレクトリは変更されない
作業ディレクトリ#
ローカルコンピュータ内のプロジェクトファイル
ステージ(stage)#
ステージは一時的な保存領域で、バージョンライブラリにコミットされる予定のファイルのスナップショットを含む
よく使うコマンド
git add filename # 単一ファイルをステージに追加する
git add . # 作業ディレクトリ内のすべての変更をステージに追加する
git status # ステージ内のファイルを確認する
リポジトリ(Repository)#
リポジトリはプロジェクトのすべてのバージョン履歴を含み、各コミットはリポジトリ内に新しいスナップショットを作成し、これらのスナップショットは不変で、プロジェクトの完全な履歴を保証する
よく使うコマンド
git commit -m "コミットメッセージ" # ステージの変更をローカルリポジトリにコミットする
git log # コミット履歴を確認する
git diff # 作業ディレクトリとステージの間の差異を確認する
git diff --cached # ステージと最後のコミットの間の差異を確認する
三者間の関係#
- 作業ディレクトリ -> ステージ
git add
- ステージ -> リポジトリ
git commit -m "コミットメッセージ"
- リポジトリ -> リモートリポジトリ
git push origin branch-name
- リモートリポジトリ -> ローカルリポジトリ
git pull origin branch-name
# または
git fetch origin branch-name
git merge origin/branch-name
Git ワークフロー#
1、リポジトリをクローンする#
既存のプロジェクトに参加する場合、まずリモートリポジトリをローカルにクローンする必要があります:
git clone https://github.com/username/repo.git
cd repo
2、新しいブランチを作成する#
main または master ブランチで直接開発を行わないように、通常は新しいブランチを作成します:
git checkout -b new-feature
3、作業ディレクトリ#
作業ディレクトリでコードを編集したり、新しいファイルを追加したり、不要なファイルを削除したりします。
4、ファイルをステージする#
変更されたファイルをステージに追加して、次のコミット操作の準備をします:
git add filename
またはすべての変更されたファイルを追加する
git add .
5、変更をコミットする#
ステージの変更をローカルリポジトリにコミットし、コミットメッセージを追加します:
git commit -m "新機能を追加"
リモートリポジトリに接続する
git remote add origin [[email protected]]
6、最新の変更をプルする#
ローカルの変更をプッシュする前に、リモートリポジトリから最新の変更をプルすることが望ましいです。これにより、コンフリクトを避けることができます:
git pull origin main
または新しいブランチで作業している場合
git pull origin new-feature
7、変更をプッシュする#
ローカルのコミットをリモートリポジトリにプッシュします:
git push origin new-feature
8、ブランチを削除する#
新機能ブランチが不要になった場合は、それを削除できます:
git branch -d new-feature
またはリモートリポジトリからブランチを削除する:
git push origin --delete new-feature
Git コマンド#
Git ブランチ#
Git リポジトリがフォークされた後のインターフェースは以下の通りです:
各ブランチが平行に表示され、特定のプロジェクトの開発が完了したときのみ主ブランチにマージされます。
では、ブランチは何のためにあるのでしょうか?新しい機能を開発する計画があるとき、初日に 50%を完成させた場合、直接 master ブランチにコミットすると、他の人が開発できなくなる可能性があります。すべてを書き終えてからコミットすると、予期せぬ理由で以前の進捗が失われる可能性があります。この時、ブランチの優位性が発揮されます。自分だけが見えないブランチを作成し、そのブランチでコードを開発しても他の人に影響を与えず、自由に操作できます。開発が終了したら、一度に master ブランチにマージします。
Git ブランチのよく使うコマンド#
git branch # すべてのローカルブランチをリスト表示
git branch -r # すべてのリモートブランチをリスト表示
git branch -a # すべてのローカルおよびリモートのブランチをリスト表示
git branch [new-branch-name] # 新しいブランチを作成するが、現在のブランチに留まる
git checkout -b [new-branch-name] # 新しいブランチを作成し、そのブランチに切り替える
git branch --track [branch] [remote-branch] # 新しいブランチを作成し、指定されたリモートブランチとの追跡関係を確立する
git checkout [new-branch-name] # 指定されたブランチに切り替え、作業ディレクトリを更新する
git merge [branch] # 指定されたブランチを現在のブランチにマージする
git branch -d [branch] # ブランチを削除する
git push origin --delete [branch] # リモートブランチを削除する