Add
# 部分的にaddする
git add -p
# add済みのfileをadd(deletedを消すときにも使う)
git add -u
Apply
diffからworking treeに反映する
git diff <FILE> > pending.diff
git apply pending.diff
Archive
# zip形式でファイルを出力。
git archive <COMMIT> --format=zip -o <OUTPUT FILE>
Bisect
# スクリプトで渡す
git bisect run ./test_script #=> 成功 0, 失敗 1, スキップ 125で返すスクリプト
コミットを二分探索する
git bisect good v1.6.0
git bisect bad v1.6.2
git bisect good # 壊れてない
git bisect bad # こわれている
git bisect skip # スキップ
git bisect reset # 終了
Blame
# どのcommitでそのファイルが追加されたかみる
git blame <FILE>
Branch
# リモートのbranch一覧をみる
git branch -r
# ブランチ名を変更する
git branch -m <NEW_NAME>
# ローカルブランチを削除
git branch -d <BRANCH>
# ローカルブランチを強制削除
git branch -D <BRANCH>
# リモートブランチを削除
git push origin :<BRANCH>
# ローカルブランチをリネーム
git branch -m <OLD_BRANCH_NAME> <NEW_BRANCH_NAME>
Clean
# 管理されていない(.gitignoreにもない)ファイルを削除する -n は消去ファイル確認
git clean -n -f
Clone
# submodule も一緒に初期化
git clone --recursive <URL>
Checkout
# work treeの向き先を現在のcommitにする(detached HEAD)
git checkout HEAD^0
# fileをコミットからもどす
git checkout <COMMIT> file
# fileをインデックスから戻す
git checkout <FILE>
# remoteのブランチをとってきてcheckout
git checkout -t -b <BRANCH> origin/<BRANCH>
# 一つ前のbrachにcheckoutする
git checkout -
# 強制上書き
git checkout .
git pull
Cherry-pick
# 狙ったコミットをマージする
git cherry-pick <COMMIT>
Commit
commit.sh
# 追加してcommitする
git commit --amend
Diff
diff.sh
# 最新のコミットと、インデックスの間
git diff --cached
# コミット間の変更ファイル一覧
git diff --stat
# ファイル名と変更を表示
git diff --name-status
# カラーモード
git diff --color-words
Fetch
# 全てfetchする
git fetch <REMOTE> <BRANCH>
# fetchしたcommitをmergeする
git merge FETCH_HEAD
Format-patch
# 差分をpatch形式としてファイルで出力する
git format-patch <COMMIT..COMMIT>
Log
log.sh
# 出力するコミット数制限
git log -2
# 各コミットの変更をパッチ形式で出力
git log -p
# ログメッセージの最初の1行を出力
git log --pretty=short
# 内容に変更がある部分を探す
git log --pretty=short -S 'class Abc
def aa
p "aa"
end
end' -- <FILE>
# 全てのログを見る
git log -g
# onelineでみる
git log --oneline
# ある特定のファイルのlogをみる
git log v1.0.0 -- path/to/file.c # v1.0.0タグ以降のfile.cのログを見る
# ある特定のユーザーのコミットをみる
git log --author="<USER NAME>"
Ls-files
# マージが必要なfileを出力
git ls-files -u
Merge
# マージする。デフォルトはff
git merge <BRANCH>
# ffでも<BRAHCN>の情報があったことを残してMergeする
git merge --no-ff <BRANCH>
# 公開したcommitを取り消す
git merge -s ours <COMMIT>
# 一つ前にいたbranchをmergeする
git merge -
Merge-base
# 共通のcommitオブジェクトを出力する
git merge-base <COMMIT> <COMMIT>
Push
# 2つ前のコミットでプッシュ先のmasterブランチを更新
git push REMOTE HEAD^^:master
# ローカルmasterでremoteのmaster更新
git push REMOTE master
# ブランチ削除
git push :temporary
# 強制的にpushする。(過去のcommitを変えちゃうかもしれない)
git push -f
Reset
# indexから全て削除
git reset
#indexからFILEを削除
git reset <FILE>
# commitを削除
git reset HEAD^
# commitを削除しファイルももとに戻す
git reset --hard HEAD
# resetを取り消す
git reflog
git reset --hard <リセットの前のCOMMIT>
# 直前の操作(commit, merge, rebase, reset等)を取り消す
git reset --hard ORIG_HEAD
Remote
# 現在Remoteとして設定されている一覧を取得
git remote -v
# Remoteを登録する
git remote add <REMOTE>
# Remoteとして登録しているのを削除する
git remote rm <REMOTE>
# Remote の url を変更する
git remote set-url <REMOTE> <URL>
Rev-list
# 指定したディレクトリのコミットidを一覧表示
git rev-list HEAD^..HEAD -- DIR/
Revert
# 過去のcommitを打ち消すcommitをする
git revert <COMMIT>
# コミットを行わない
git revert -n <COMMIT>
Rm
# Add取り消し
git rm --cached <FILE>
Rebase
# インタラクティブリベースを取り消す
git rebase --abort
過去のcommitを修正する
git rebase -i HEAD~<戻したいコミットの位置>
# editorが起動するので直すコミットの横にあるコマンドを edit に変更
# 実際に変更して git add で indexに追加
git commit --amend でcommit
git rebase --continue
リベースそのものを無かったことにする
git log -g # rebase -i 前のコミットを探す
git reset <COMMIT>
topicブランチ育て中にmasterブランチの変更を取り込む
git checkout feature
git fetch origin
git rebase origin/master
以下でも一緒
git checkout feature
git pull --rebase origin master
git checkout master
git pull --rebase
Shortlog
# コミットの(ユーザー毎の?)要約
git shortlog HEAD^..HEAD -- <DIR>
# ユーザー毎のコミット数を集計
git shortlog <COMMIT>..<COMMIT> --summary
Status
# 次のcommitに含まれるのを確認する
git status
Stash
現在の変更を一時的によける
git stash
git checkout <Other BRANCH> # edit files …
git add
git commit
git checkout <Working BRANCH>
git stash pop
Tag
remoteのタグを消す
# localのタグを消す
git tag -d <TAG_NAME>
# それをremoteに反映する
git push origin :refs/tags/<TAG_NAME>