LoginSignup
87
84

More than 3 years have passed since last update.

.gitconfigから学ぶGitコマンド

Last updated at Posted at 2016-10-30

目的

色々な方の.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
...

参考リンク

87
84
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
87
84