主な用語
- 作業ツリー/ワークツリー/ワーキングツリー:ローカルリポジトリ内でgit管理対象としたファイル群。ユーザの作業場所
- インデックス/ステージングエリア:git addすると作業ツリーの内容がインデックスに保存される。インデックスに保存された内容がコミット対象になる。
- ローカルリポジトリ:自分のコンピュータ上のリポジトリ
- リモートリポジトリ:githubなど、リモートのリポジトリ。originっていう名前を付ける事が多いと思う。
- HEAD:直近(最新)のコミット
gitコマンド
準備
グローバルなユーザ名とメアドを設定
git config --global user.name "ユーザ名"
git config --global user.email "メアド"
エイリアスを設定
git config --global alias.ls "log --stat"
git config --global alias.lp "log -p"
git config --global alias.lg "log --graph --pretty=oneline"
git config --global alias.cf 'commit -m "fixup! c"'
git config --global alias.conflict "diff --name-only --diff-filter=U"
git config --global alias.s "status"
git config --global alias.d "diff"
git config --global alias.aa "add -A"
メッセージを編集するエディタをemacsに設定
git config --global core.editor emacs
autosquash
git config --global rebase.autosquash true
個別のリポジトリ用のユーザ名とメアドを設定
cd 該当のリポジトリ
git config user.name "ユーザ名"
git config user.email "メアド"
リポジトリを初期化
cd 該当のリポジトリ
git init
既存のリモートリポジトリをローカルリポジトリにコピー ※GitHubの場合
git clone git@github.com:ユーザ名/リポジトリ名.git
リモートリポジトリを追加 ※GitHubのリモートリポジトリをoriginとして追加する場合
git remote add origin git@github.com:ユーザ名/リポジトリ名.git
ブランチ操作
ブランチを作成しそのブランチをチェックアウト
git checkout -b branch_name
ブランチをoriginにpush
git push -u origin branch_name
ローカルとリモートのブランチ一覧
git branch -a
マージ済みのブランチ削除
git branch -d ブランチ名
未マージのブランチ削除
git branch -D ブランチ名
diff
作業ツリーとインデックスとの差分を表示
git diff
インデックスとリポジトリとの差分を表示
git diff --cached
作業ツリーとHEADとの差分を表示
git diff HEAD filename
ブランチ間ので同一ファイルを比較
git diff ブランチ1 ブランチ2 filename
ブランチ間の差分があるファイルを表示
git diff --stat -name--status ブランチ1 ブランチ2
ブランチ間の差分があるファイルと内容を表示
git diff -name--status ブランチ1 ブランチ2
変更されたファイル名のみを表示
git diff --name-only
タグ操作
タグ一覧
git tag
タグ作成
git tag -a タグ名 -m '説明'
コミットを指定してタグ付け
git tag -a タグ名 -m '説明' コミットのID
タグを指定してチェックアウト
git checkout refs/tags/タグ名
タグを指定して指定したブランチにチェックアウト
git checkout -b ブランチ名 refs/tags/タグ名
タグ削除
git tag -d タグ名
タグの詳細を表示
git show タグ名
タグをoriginにpush
git push origin タグ名
log
直近2つだけのログを表示
git log -2
直近2つだけのログをパッチと共に表示
git log -2 -p
直近3つだけのログを変更のあったファイル名と共に表示
git log --name-status -3
グラフも表示
git log --graph --pretty=oneline
マージコミットを表示しない
git log --no-merges
コミットログに"index"を含むコミットを表示
git log --grep index
"index"という文字列を含む行が追加もしくは削除されたコミットを表示
git log -S"index"
"index"という文字列を含む行が追加もしくは削除されたコミットの差分を表示
git log -S"index" -p
特定のファイルのコミット履歴を表示
git log -p ファイル
自分用
git log --name-status --no-merges
git --no-pager log --name-status --no-merges
ステージング操作
修正・追加したファイルをステージングに追加
git add . -A
ステージングの未コミットの指定ファイルの変更を元に戻す
git reset ファイル
ステージングの未コミットの指定ファイルの変更を元に戻し、ワーキングツリーの状態も修正前に戻す
git reset --hard ファイル
ステージングの未コミットの全ファイルの変更を元に戻す
git reset
直近のコミットを元に戻す(ファイルはそのまま)
git reset HEAD^
未整理
過去の操作の一覧を見る
git reflog
HEAD@{1}の状態に戻す
git reset --hard HEAD@{1}
作業ツリーの特定の変更を元に戻す
git checkout ファイル
作業ツリーの全ファイルの変更を元に戻す
git checkout .
トラックされてないファイルを削除
git clean -fd
.gitignoreに入ってるもの含めてトラックされてないファイルを削除
git clean -xfd
直近のコミットを取り消し、ファイルも元に戻す
git reset --hard HEAD^
以前のコミットを打ち消すコミットを作る
git revert コミットID
リモートリポジトリから削除されたブランチをローカルから削除
git pull --prune
変更が加えられたファイルを表示
git status
現在のワークツリーを退避する
git stash
現在退避してる内容を表示
git stash list
現在退避している内容を取得
git stash pop
指定したファイルのコミット履歴を表示
git blame ファイル名
設定一覧
git config --list
PR用に空のコミットを作成してpush
git commit --allow-empty -m "wip"
git push origin ブランチ
ブランチの分岐元を自動的に特定しsquash
※masterからブランチを作った場合
git rebase -i --keep-empty --autosquash $(git show-branch --merge-base master HEAD)
直前のコミットのコメントを修正
git commit --amend
squashとかした後にpush
git push --force-with-lease
特定のコミット時点のファイルを表示する
git cat-file -p ハッシュ:ファイルのパス
masterからrebase
git rebase master
conflictしたファイル一覧
git diff --name-only --diff-filter=U
一時的に変更しても変更しなかったことにしたい
git update-index --assume-unchanged 対象のファイル
↑の状態を解除したい
git update-index --no-assume-unchanged 対象のファイル
コンフリクトしたときにリモートリポジトリの内容を全て適用
git checkout --theirs .
コンフリクトしたときにローカルリポジトリの内容を全て適用
git checkout --ours .