🤖

Git基礎

に公開

この記事は自分の理解とメモを兼ねた記事になっています。
新しい知見が増えれば追加したりしようと思います。

Gitとは

  • 分散型バージョン管理システム
  • ファイルの状態を好きなときに更新履歴として保存できる
  • 更新履歴から特定のバージョンに戻したり、更新するバージョンを指定できる

公式ドキュメント

基本用語

リポジトリ

  • 過去のソースコード履歴などのデータベース・保存場所
  • ローカルリポジトリ
    • 各PCにあるデータベース・リポジトリ
  • リモートリポジトリ
    • 各PC以外の保存用のリポジトリ・ローカルリポジトリのバックアップ
    • GitHubやBitbucketなどが有名

ワークツリー・ステージング

  • ワークツリー・ワーキングディレクトリ (Working Tree・Working Directory)
    • 作業をしているディレクトリ、編集を行った最新のファイルが存在
    • 作業内容をインデックスに変更を登録(addコマンド)
    • Gitでは、Working Treeの役割を砂場と説明
  • インデックス・ステージング(Index・Staging Area)
    • ローカルリポジトリに保存を行う準備をする場所。
    • ワークツリーから登録された内容を登録(commitコマンド)

ブランチ

  • ブランチ(branch)
    • それぞれの変更・保存を混ぜないため分岐して記録・分岐履歴
    • 1つのプロジェクトから分岐させることにより、プロジェクト本体に影響を与えずに開発を行える機能

コミット

  • リポジトリ(データベース)に登録する操作
  • 変更の保存をリポジトリに行うことで、リポジトリから昔の状態に戻せれる
  • コミットメッセージ
    • コミットする際に、そのコミットでどんな作業をしたか、どんな変更をしたか、ということをメモできる
  • コミットログ
    • 過去のコミットされたデータの記録
    • コミット内容とコミットメッセージを見ることができる
  • HEAD
    • 直前のコミットのこと

クローン・プッシュ・プル

リモートリポジトリとのやり取りをする際によく使うコマンド

  • クローン(clone)
    • リモートリポジトリの内容をローカルに完全コピー
  • プッシュ(push)
    • ローカルリポジトリの変更をリモートリポジトリに送信
  • プル(pull)
    • リモートリポジトリの最新変更をローカルに取得・統合

コマンド

設定・初期コマンド

config

ユーザー情報やリモート先の情報などを設定
git config --list
以上のコマンドで設定を確認できる

init

$ git init [project-name]
指定した名前のローカルリポジトリを作成
大抵の初期化コマンドで .gitを作成

clone

$ git clone [url]
プロジェクトとすべてのバージョン履歴をダウンロード
リポジトリの内容を、丸々(コミットログも含めて)コピー

状態確認・差分確認

status

$ git status
コミット可能なすべての新規または変更のあるファイルを一覧で表示
ステージングの状態を確認

diff

$ git diff
まだステージされていないファイルの差分を表示

$ git diff --staged
ステージングと最後のファイルバージョンとの差分を表示
$ git diff [first-branch]..[second-branch]
2つのブランチ間の差分を表示

log

$ git log
現在のブランチのバージョン履歴を一覧で表示
コミットのログを確認できる

$ git log --follow [file]
名前の変更を含む指定したファイルのバージョン履歴の一覧を表示

  • -oneline それぞれのコミットを一覧表示
  • -graph ブランチの流れを確認できる

show

$ git show [commit]
指定されたコミットのメタ情報と変更内容を出力

変更を保存・戻す

add

$ git add [file]
ファイルをステージングに反映
バージョン管理のためにファイルのスナップショット(オブジェクトに圧縮)を作成

commit

$ git commit -m "[commit message]"
ステージングからコミットを行う
ファイルのスナップショットをバージョン履歴内に恒久的に記録

reset

$ git reset [file]
ファイルをステージングから外すが、その内容は保持

$ git reset [commit]
[commit]以降すべてのコミットを取り消し、ローカルでは変更を保持

ブランチ操作

branch

$ git branch
現在のリポジトリ上のすべてのローカルブランチを一覧で表示

$ git branch [branch-name]
新規ブランチを作成
$ git branch -d [branch-name]
指定されたブランチを削除

checkout・switch

$ git checkout [branch-name]
指定されたブランチの切り替え、初期からあるコマンド

$ git switch -c [branch-name]
指定されたブランチに切り替え、作業ディレクトリを更新

merge

$ git merge [branch-name]
指定されたブランチの履歴を現在のブランチに統合

ローカルリポジトリとやり取り

fetch

$ git fetch [bookmark]
リポジトリブックマークからすべての履歴をダウンロード
特定のブランチをローカルにコピー

push

$ git push [alias] [branch]
すべてのローカルブランチのコミットをGitHubにアップロード
ローカルリポジトリの内容を、リモートリポジトリに反映する操作

pull

$ git pull
ブックマークの履歴をダウンロードし、変更を統合
リモートリポジトリの内容を、ローカルリポジトリに反映する操作

ワークツリーの変更を一旦仮保存

stash

とりあえず一旦置いておくコマンド
未完成の変更を一時的に退避し、復旧させることができる

$ git stash
すべての変更のあるトラックされているファイルを一時的に保存します

$ git stash pop
直近に一時保存されたファイルを復旧します

$ git stash list
すべての一時保存された変更セットを一覧で表示します

$ git stash drop
直近に一時保存された変更セットを破棄します

gitignore

gitで扱いたくないファイルやコミット、プッシュしたくないファイルを指定できる
[Git] .gitignoreの仕様詳解 #Git - Qiita
.gitignore の書き方 #Git - Qiita
Gitで.gitignoreを反映させる方法 - Awesome Blog

コミットメッセージの書き方

以下の形式をメッセージ含めると、そのコミットが何をしたのかがわかりやすい

Git-flow

Gitのブランチ機能を利用する開発戦略の一つ
Gitflow とは、フィーチャー ブランチと複数のプライマリ ブランチを使用する代替 Git ブランチ モデル

  • master
    • ユーザにプロダクトとしてリリースするソースコードを管理するブランチ
    • タグでバージョンを管理
    • 開発作業は行わない
  • develop
    • 実際に開発作業を行うブランチ
    • バグ修正
    • 新しい機能はfeatureブランチを作成して開発
  • feature
    • developブランチを基盤に作成されるブランチ
    • 新しい機能を開発
    • 開発が終わったらdevelopブランチにマージ
  • release
    • developブランチを基盤に作成されるブランチ
    • リリース直前にバグ修正などの微調整、つまりQAを行うブランチ
    • QAを完了したら、master, developブランチにマージ
  • hotfix
    • リリースされたバージョンで発生したバグを速やかに修正するブランチ
    • 修正後すぐmaster, developブランチにマージ

A successful Git branching model » nvie.com
Git-flowをざっと整理してみた | DevelopersIO

Discussion