こういうのはtigでやるのが楽なんですけど覚えておいて損はないですね。
基本操作
(WIPなプルリクのために)空コミットする
$ git commit -m '空コミット' --allow-empty
ステージングの変更と直近のコミット内容を比較する
$ git diff --cached
Gitでの追跡をやめる(ステージングエリアから削除する)
$ git rm --cached <ファイル名>
特定のコミットだけを取ってきて適用する
# コミット
$ git cherry-pick <コミット>
# コミット範囲指定
$ git cherry-pick <開始コミット>..<終了コミット>
作業やり直し
直前のコミットコメントを変更する
$ git commit -m "直前のコミット"
$ git commit --amend
直前のコミットを取消し
# 直前のコミットのみを元に戻す
$ git reset --soft HEAD~
# 直前のコミットとインデックスを元に戻す
$ git reset HEAD~
# 直前のコミットとインデックスと作業ファイルを元に戻す
$ git reset --hard HEAD~
マージの取り消し
$ git reset --hard ORIG_HEAD
やらかしたときに直前に戻る
# 戻りたいコミットをしらべる
$ git reflog
# 調べたコミットに戻る
$ git reset --hard <調べたコミット>
複数のコミットをまとめる
# 例) git rebase -i HEAD~~
$ git rebase -i <コミット>
rebase内で使えるコマンド
コマンド | 説明 |
---|---|
p, pick | コミットをそのまま採用する |
r, reword | コミットを採用するが、メッセージのみ書き換える |
e, edit | コミットを採用するが、修正のために立ち止まる |
s, squash | コミットを採用するが、前のコミットと合体させる |
f, fixup | squashと同様だが、コミットログメッセージは捨てる |
x, exec | シェルを使ってコマンドを実行する |
# 修正を適用する
$ git rebase --continue
特定のコミットを打ち消す
# 打ち消しコミットが発生する(元のコミットはログとしては残る)
$ git revert <コミット>
マージコミットを打ち消す
# リリース後になにかあって切り戻す時などに利用
$ git revert -m 1 <コミット>
ブランチの管理
ブランチを削除する
$ git branch -d <ブランチ名>
マージ済みまたは未マージのブランチ一覧を表示する
# マージ済み
$ git branch --merged
# 未マージ
$ git branch --no-merged
リモートブランチをローカルにチェックアウトする
$ git checkout -b <ローカルブランチ名> origin/<リモートブランチ名>
# または以下
$ git checkout -t origin/<リモートブランチ名>
# リモートにあってローカルにない場合は以下でもOK
$ git checkout <リモートブランチ名>
ローカルブランチをリモートブランチにプッシュする
$ git push origin <ローカルブランチ名>:<リモートブランチ名前>
ブランチ名を変更する
$ git branch -m <変更前ブランチ名> <変更後ブランチ名>
リモートブランチを削除する
$ git push origin :<リモートブランチ名>
ブランチ間の差分を比較する
$ git diff <ブランチ1>..<ブランチ2>
フェッチした内容をマージする
$ git fetch
$ git merge FETCH_HEAD
履歴の閲覧
単語単位で差分を比較する
$ git log -U1 --word-diff
コミットを1行で出力する
$ git log --pretty=oneline
コミットごとに変更したファイル名を表示する
$ git log --pretty=oneline --name-only
コミットログを整形して表示する
$ git log --pretty=format:"<フォーマット>"
フォーマットに指定できるオプションは以下のとおり。
オプション | 内容 |
---|---|
%H | コミットのハッシュ |
%h | コミットのハッシュ (短縮版) |
%T | ツリーのハッシュ |
%t | ツリーのハッシュ (短縮版) |
%P | 親のハッシュ |
%p | 親のハッシュ (短縮版) |
%an | Author の名前 |
%ae | Author のメールアドレス |
%ad | Author の日付 (--date= オプションに従った形式) |
%ar | Author の相対日付 |
%cn | Committer の名前 |
%ce | Committer のメールアドレス |
%cd | Committer の日付 |
%cr | Committer の相対日付 |
%s | 件名 |
作業内容を退避する
作業中のファイルを一時退避して別ブランチで作業する
$ git stash
$ git checkout <移動先ブランチ>
$ git checkout <元のブランチ>
$ git stash pop
退避した内容から別ブランチを作成する
$ git stash branch <ブランチ名>
デバッグ
特定ファイルの特定行を変更した人を特定する
# -w でホワイトスペースを無視
$ git blame -w -L <行番号> <対象ファイル>