Git

.gitconfigから学ぶGitコマンド

More than 1 year has passed since last update.


目的

色々な方の.gitconfigを参考にしてスケベな.gitconfigを作ったのでGitのお勉強としてまとめます。


.gitconfig

[core]

excludesfile = ~/.gitignore_global
autocrlf = false
quotepath = false
pager = less -r
editor = vim
[color]
ui = auto

[push]
default = current
[merge]
ff = false
[pull]
rebase = preserve
[alias]
l = log --date=short --pretty=format:'%C(yellow)%h %Cgreen%cd %Cblue%cn %Creset%s'
ll = log --stat --decorate=short --pretty=format:'%C(yellow)%h %Cgreen%cr %Cblue%cn%Cred%d %Creset%s %C(cyan)%b'
lg = log --graph --date=short --decorate=short --pretty=format:'%C(yellow)%h %Cgreen%cd %Cblue%cn%Cred%d %Creset%s'
lm = log --merges --pretty=format:'%C(yellow)%h %Cgreen%ci %Cblue%cn%Cred%d %Creset%s %C(cyan)%b'
b = branch
ba = branch -a
co = checkout
com = checkout master
cob = checkout -b
a = add
aa = !git add -A && git s
c = commit
cm = commit -m
cam = commit -a -m
wip = commit -m 'WIP'
amend = commit --amend -C HEAD
d = diff
dc = diff --cached
dn = diff --name-only
dw = diff --color-words
um = !git --no-pager diff --name-only --diff-filter=U
ft = fetch
ftp = fetch --prune
pl = pull
ps = push
info = remote show origin
s = status --short --branch
st = status
r = reset
rs = reset --soft
rsh = reset --soft HEAD
rh = reset --hard
rhh = reset --hard HEAD
rl = reflog show -n 20
rb = rebase
rbi = rebase -i
rbh = rebase HEAD
rbo = rebase --onto
sync = !git checkout master && git pull origin master && git fetch -p origin && git branch -d $(git branch --merged | grep -v master | grep -v '*')
ignore = "!f() { echo $1 >> \"${GIT_PREFIX}.gitignore\"; }; f"
alias = !git config --list | grep 'alias\\.' | sed 's/alias\\.\\([^=]*\\)=\\(.*\\)/\\1\\\t => \\2/' | sort


基本設定


[core]



  • excludesfile = ~/.gitignore_global


    • ホームディレクトリ内に置いた.gitignore_globalを全gitプロジェクトに反映させる




  • autocrlf = false


    • 改行コードの自動変換の設定。WinとMac両方使うのでfalse




  • quotepath = false


    • 日本語ファイル名を表示




  • pager = less -r


    • pagerをlessに設定




  • editor = vim


    • editorをvimに設定




[color]



  • ui = auto


    • 色を自動設定




[push]



  • default = current


    • カレントブランチと同名のリモートブランチがあればpush




[merge]



  • ff = false


    • mergeは常に--no-ff




[pull]



  • rebase = preserve


    • 全ブランチで git pull –rebase を使う




alias


logコマンド



  • l = log --date=short --pretty=format:'%C(yellow)%h %Cgreen%cd %Cblue%cn %Creset%s'


    • コミットの簡易ログを表示
      l.png






  • ll = log --stat --decorate=short --pretty=format:'%C(yellow)%h %Cgreen%cr %Cblue%cn%Cred%d %Creset%s %C(cyan)%b'


    • コミットの詳細ログを表示
      ll.png






  • lg = log --graph --date=short --decorate=short --pretty=format:'%C(yellow)%h %Cgreen%cd %Cblue%cn%Cred%d %Creset%s'


    • コミットのグラフログを表示
      lg.png






  • lm = log --merges --pretty=format:'%C(yellow)%h %Cgreen%ci %Cblue%cn%Cred%d %Creset%s %C(cyan)%b'


    • マージログを表示
      lm.png




branchコマンド


  • b = branch


  • ba = branch -a


    • ローカルリポジトリとリモートリポジトリを両方表示




checkoutコマンド


  • co = checkout


  • com = checkout master


  • cob = checkout -b


    • ブランチを作成してチェックアウト




addコマンド


  • a = add


  • aa = !git add -A && git s


    • 全てのファイルをaddして簡易statusを表示




commitコマンド


  • c = commit


  • cm = commit -m


    • コミットメッセージを指定




  • cam = commit -a -m


    • コミットメッセージを指定して変更されたファイルを全てコミット




  • wip = commit -m 'WIP'


    • コミットメッセージをWIPでコミット




  • amend = commit --amend -C HEAD


    • コミットをHEADに追加 (すごく便利)




diffコマンド


  • d = diff


  • dc = diff --cached


    • キャッシュとの差分を表示




  • dn = diff --name-only


    • ファイル名だけ表示




  • dw = diff --color-words


    • 記号やスペースで区切られた単語単位でのdiffを表示




  • um = !git --no-pager diff --name-only --diff-filter=U


    • まだマージされていないファイルを表示




fetchコマンド


  • ft = fetch


  • ftp = fetch --prune


    • リモートで削除されているリモートブランチを削除




pullコマンド


  • pl = pull


pushコマンド


  • ps = push


statusコマンド


  • st = status


  • s = status --short --branch


    • 簡易ステータスを表示




resetコマンド


  • r = reset

  • rs = reset --soft

  • rsh = reset --soft HEAD

  • rh = reset --hard

  • rhh = reset --hard HEAD


reflogコマンド



  • rl = reflog show -n 20


    • reflogを20行表示




rebaseコマンド


  • rb = rebase

  • rbh = rebase HEAD


  • rbi = rebase -i


    • エディタでrebase




  • rbo = rebase --onto


    • 第1引数に指定したコミットへ、第2引数に指定したコミットから 第3引数に指定したコミットの差分となるコミットを適用する



下の状態で

 o---o---o---o---o  master

\
o---o---o---o---o next
\
o---o---o topic

git rebase --onto master next topicすると

 o---o---o---o---o  master

| \
| o'--o'--o' topic
\
o---o---o---o---o next


複合



  • info = remote show origin


    • origin(リモートリポジトリ)の情報を表示



$ git info

* remote origin
Fetch URL: git://github.com/schacon/grit.git
Push URL: git://github.com/schacon/grit.git
HEAD branch: master
Remote branches:
gh-pages tracked
integration tracked
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)




  • sync = !git checkout master && git pull origin master && git fetch -p origin && git branch -d $(git branch --merged | grep -v master | grep -v '*')


    • 現在のmasterを最新のものにした上で過去のブランチは削除する

    • remote/masterが更新されたらこれをしておけばおk



      • !git checkout master

        masterにチェックアウト


      • git pull origin master

        origin/masterをpull


      • git fetch -p origin

        originで削除されているリモートブランチを削除


      • git branch -d $(git branch --merged | grep -v master | grep -v '*')

        マージされたブランチを削除








  • ignore = "!f() { echo $1 >> \"${GIT_PREFIX}.gitignore\"; }; f"


    • .gitignoreに追加

    • git ignore [ignoreするファイル名]






  • alias = !git config --list | grep 'alias\\.' | sed 's/alias\\.\\([^=]*\\)=\\(.*\\)/\\1\\\t => \\2/' | sort


    • 登録されているaliasを表示



$ git alias

a => add
aa => !git add -A && git s
amend => commit --amend -C HEAD
b => branch
ba => branch -a
c => commit
cam => commit -a -m
cm => commit -m
co => checkout
cob => checkout -b
com => checkout master
d => diff
dc => diff --cached
dn => diff --name-only
dw => diff --color-words
ft => fetch
ftp => fetch --prune
ignore => !f() { echo $1 >> "${GIT_PREFIX}.gitignore"; }; f
info => remote show origin
...


参考リンク