-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy path.gitconfig
325 lines (286 loc) · 12.7 KB
/
.gitconfig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
[include]
path = ~/.gitconfig.local
[user]
# name = xxxxx
# email = xxxxx
[color]
status = auto
diff = auto
branch = auto
interactive = auto
grep = auto
ui = auto
[core]
excludesfile = ~/.gitignore
autocrlf = input # CRLFを自動変換
editor = /usr/bin/vim # 絶対パス指定必須
quotepath = false # 日本語のファイル名表示に対応
[branch]
# autosetuprebase = always # pullは常に--rebaseで
# autosetupmerge = false # リモートの追跡ブランチを自動設定しない
[help]
autocorrect = 1
[commit]
template = ~/.gittemplates/commit-template
[push]
default = upstream # Default "simple" in Git 2.0.
[pull]
ff = only
[diff]
tool = vimdiff
algorithm = histogram
# external = p4diff
[merge]
stat = true
tool = vimdiff
ff = false
[mergetool "p4merge"]
cmd = p4merge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
keepTemporaries = false
trustExitCode = false
keepBackup = false
[rebase]
stat = true
autosquash = true # for --fixup
[grep]
lineNumber = true
[pretty]
medium-reverse = format:%C(red reverse)%d%Creset%C(white reverse) %h% Creset %C(green reverse) %an %Creset %C(cyan)%ar%Creset%n%C(white bold)%w(80)%s%Creset%n%n%w(80,2,2)%b
[alias]
# alias list
alias = !git config --list | grep 'alias\\.' | sed 's/alias\\.\\([^=]*\\)=\\(.*\\)/\\1\\\t => \\2/' | sort
# Make this a git repo
this = !git init && git add . && git commit -m \"Initial commit\"
# Quickly add a file/dir to .gitignore.
ignore = !([ ! -e .gitignore ] && touch .gitignore) | echo $1 >>.gitignore
# config
cfl = config --global --list # グローバルConfigを参照
cfll = config --local --list # ローカルConfigを参照
cfe = config --global -e # グローバルConfigを編集
cfel = config --local -e # ローカルConfigを編集
ed = config --global -e # グローバルConfigを編集
# status
s = status -sb # シンプル表示, ブランチ情報も表示
st = status
stv = status -v
stvv = status -v -v
si = status -b --ignored # .gitignoreで無視されたファイルも表示
# show
sh = show
shr = remote -v # リモートリポジトリの一覧(URL付き)
shro = remote show origin # リモートリポジトリの詳細表示(origin)
shrg = remote show github # リモートリポジトリの詳細表示(github)
sb = show-branch --all --color
# remote
remadd = remote add # git remote add origin <https://..., git://...>
# ls-files
ls-fu = ls-files -u # コンフリクトしたファイルの一覧
# ls-tree
ls-th = ls-tree HEAD # treeを表示
# clone
clone = clone --recursive
# fetch
ft = fetch
ftp = fetch --prune
fs = !git fetch --prune && git su
# pull
plr = pull --rebase # 不必要なマージコミットを作りたくない場合
# http://d.hatena.ne.jp/hirose31/20130724/1374648978
pull-dry-run = !"git fetch origin; B=$(git rev-parse --abbrev-ref HEAD); git diff --stat --summary ${B}..origin/${B}"
# push
po = push origin # push先はorigin
#pof = push -f origin # 強制push
pou = push -u origin # pushと同時に追跡ブランチを設定
# rebase
rbt = rebase --ignore-date
rbm = rebase --merge master
rbmm = rebase master
rbc = rebase --continue # rebase継続(次のコミットへ)
rba = rebase --abort # rebase中止
# コミット履歴の書き換え
rbi = rebase -i
rbit = rebase -i --ignore-date
rbi1 = rebase -i HEAD^
rbi2 = rebase -i HEAD^^
rbi3 = rebase -i HEAD^^^
rbi4 = rebase -i HEAD^^^^
rbi5 = rebase -i HEAD^^^^^
# merge
mn = merge --no-ff # FFでもマージコミットを強制作成
mergetool-def = mergetool -y # デフォルトのマージツールでマージ
mergetool-p4 = mergetool --tool=p4merge # p4mergeでマージ
# add
add = add -v
ad = add -v
adp = add -p # ハンク毎にadd
addall = add -A # 全てadd:add . && add -u
adN = add -N # ファイルの内容を登録せずファイルが追加されたということだけを記録
# commit
c = commit -v # diffも表示
cm = commit -v --amend # 直前のcommitを修正
ca = commit -a -v # add + coimmit
cam = commit -a -v --amend # 直前のcommitを修正 + 全てcommit
# Amend with the same message
amend = !git log -n 1 --pretty=tformat:%s%n%n%b | git commit -F - --amend
# checkout
ch = checkout # WorkingTreeをIndexの状態に戻す
chh = checkout HEAD # WorkingTreeとIndexをRepositoryの状態に戻す
chb = checkout -b # branch切ってcheckoutする
cht = checkout --track -b # remoteのbranchを追跡
chm = checkout master # masterブランチへ切り替え
# branch関連
br = branch -vv
bra = branch -avv # originも含めた全てのbranchを表示
brm = branch --merged # merge済みのbranchを表示
brn = branch --no-merged # mergeしてないbranchを表示
brr = branch -rvv # remote branchを表示
# git branch を最終更新時間でソート
brt = "!f() { for i in `git branch | colrm 1 2` ; do echo `git log --date=iso8601 -n 1 --pretty='format:[%ai] %h' $i` $i ; done ; }; f | sort -r"
# ローカルブランチとリモートブランチを削除
brdd = !git branch -d "$1" && !git push --delete origin "$1"
# log関連
# --stat : 変更されたファイルを表示
# --graph : グラフを表示
# -p : diffを表示
# --max-count=n : 表示数の制限
# --first-parent : ff表示
# --no-marges : マージコミットを表示しない
wc = whatchanged # logに変更されたファイルも一緒に出す
ranking = shortlog -s -n --no-merges
# 詳細なログ
l = log -n 15 --date=iso --graph --pretty=format:'%x09%C(magenta)%h %C(cyan)%cd %C(green)%cn%x09%C(yellow)%d%C(reset)%s'
ll = log --date=iso --graph --pretty=format:'%x09%C(magenta)%h %C(cyan)%cd %C(green)%cn%x09%C(yellow)%d%C(reset)%s'
lls = log --date=iso --graph --stat --pretty=format:'%C(cyan),%ad [%cn] <commit:%h tree:%t parent:%p>%C(reset)%n %s%C(yellow)%d%C(reset)%n'
gl = log --pretty='medium-reverse' --graph --name-status
# 指定ブランチの変更点のみ抽出(分岐元:master) 最後にブランチ名を指定すること
# --reverse 逆順表示
log-branch = log --oneline --decorate master..
# $1コミット以降に、統合ブランチ($2)へ取り込まれたトピックブランチの一覧を表示
ls-topic = !git log --oneline --abbrev-commit --merges $1..$2 | sed -e "s/.* '//;s/'.*//" | sort | uniq
# reset
rh = reset HEAD # addを取り消す
rhs = reset --soft HEAD # Repositoryのみコミット前の状態に戻す
rhs1 = reset --soft HEAD~
rhs2 = reset --soft HEAD~~
rhs3 = reset --soft HEAD~~~
rhs4 = reset --soft HEAD~~~~
rhs5 = reset --soft HEAD~~~~~
rhh = reset --hard HEAD # Repository/Index/WorkingTreeをコミット前の状態に戻す
rhh1 = reset --hard HEAD~
rhh2 = reset --hard HEAD~~
rhh3 = reset --hard HEAD~~~
rhh4 = reset --hard HEAD~~~~
rhh5 = reset --hard HEAD~~~~~
cancel = !git commit -a -m 'Temporary commit for cancel' && git reset --hard HEAD~
# diff関連
d = diff
di = diff
dif = diff # IndexとWorkingTreeの差分 (addしていない変更を表示)
dm = diff master # masterとのdiff
dw = diff -w # Spaceを無視
dwd = diff --word-diff #
dwc = diff --color-words # 単語単位でいろつけてdiff
dc = diff --cached # RepositoryとIndexの差分 (addしたけどcommitしてない変更を表示)
ds = diff --staged # 同上(1.6.1移行)
dn = diff --name-only # ファイル名のみ表示
dh = diff HEAD # HEADとdiff : RepositoryとWorkingTreeの差分 (addを考慮せずcommitしてない変更を表示)
d1 = diff HEAD~ # HEADから1つ前とdiff
d2 = diff HEAD~~ # HEADから2つ前とdiff
d3 = diff HEAD~~~ # HEADから3つ前とdiff
d4 = diff HEAD~~~~ # HEADから4つ前とdiff
d5 = diff HEAD~~~~~ # HEADから5つ前とdiff
d10 = diff HEAD~~ ~~~~~~~~ # HEADから10前とdiff
dro = diff master origin/master # リモートリポジトリ(origin)とのdiff
drg = diff master github/master # リモートリポジトリ(github)とのdiff
dbr = diff -u <(git branch) <(git branch --merged) # マージしていないBranchとの差分を表示
diffr = diff --color-words --word-diff-regex='\\w+|[^[:space:]]'
# edit関連
e = edit
# mergeの際にconflictが起きたファイルを編集
edit-unmerged = "!f() { git ls-files --unmerged | cut -f2 | sort -u ; }; vim `f`"
# mergeの際にconflictが起きたファイルをadd
add-unmerged = "!f() { git ls-files --unmerged | cut -f2 | sort -u ; }; git add `f`"
# 指定したコミットで変更されたファイルを編集する
modified = "!f() { git diff $1..$1\\^ --name-only | xargs sh -c 'vim "$@" < /dev/tty' - ;}; f" delete-unmerged = "!f() { git ls-files --deleted | cut -f2 | sort -u ; }; git rm `f`"
# rm
# Remove files which have been deleted
remove = !git ls-files -z --deleted | xargs -0 git rm
# grep関連
# -E POSIX の拡張正規表現を使用
# -G POSIX の標準正規表現を使用
# -P Perl の正規表現を使用
gr = grep -iIn --full-name
# submodule
# status記号について
# -:まだ初期化されていない状態
# => git submodule update --init
# +:indexのcommit hashと異なる場合
# => git submodule update
#
sm = submodule
sms = submodule status
smu = submodule update
smui = submodule update --init
# submoduleの状態確認(最新かどうか)
smsh = submodule foreach "git remote show origin"
# submoduleの更新
smupdate = "submodule foreach 'git checkout master; git pull'"
# stash
#stl = stash list -p
#stp = stash pop
#sts = stash save
# tag
tl = tag -l -n # タグ一覧(説明付き)
tc = tag -a # タグ作成
ptg = push --tags # tagをpush
#ptgd = push origin :refs/tags/ # リモートのタグ削除
#ptgd = git push --delete origin # リモートのタグ削除
tver = !git tag -a $1 -m "Release ver.$1"
search-near-tag = name-rev --name-only # 指定したコミットが番近いタグからどの位置にあるか表示
search-branch = branch --contains # 指定したコミットがどのブランチに含まれるか表示
# cherry
# cherr -vで出てくる;commitから#1234なチケット番号を切り出す
cherry-ticket-numbers = "!f() { git cherry -v "$@" | cut -b 44- | awk 'match($0, /#[0-9]+/) {print substr($0, RSTART, RLENGTH)}' | sort -u ;}; f"
show-cherry = cherry -v master # コミット毎に上流ブランチに既に存在しているかを見る
# colorized cheery -v
cch = "!f() { git cherry -v "$@" | awk '{ if($1 == \"+\"){ color = \"green\" } if($1 == \"-\"){ color = \"red\" } cmd = \"git show --date=short --no-notes --pretty=format:\\047%C\" color $1 \" %h %Cgreen%cd %Cblue%cn%x09%Creset%s\\047 --summary \" $2; cmd | getline t; close(cmd); print t }' ;}; f"
# cherry-pick
chpk = cherry-pick # 特定のコミットを取り込む
chpkn = cherry-pick -n # 特定のコミットを取り込む(no commit)
# git browse-remote
brr = browse-remote
# check-ignore (ver >= 1.8.2)
# .gitignoreに対応したignoreファイルをチェック
chig = check-ignore -v
# git-now
n = now
nr = now rebase master
ng = now grep
# hub
# https://github.com/defunkt/hub
# http://defunkt.io/hub/
# PR
# hub pull-request -h <owner>:<branch> -b <owner>:<branch>
# -h PR先
# -b PR元 (省略するとカレントブランチ)
# other format: <owner/repo>:<branch>
# hub pull-request -i <issue-no>
iss = !git browse -- issues
pbcopy = !printf "$1" | pbcopy
# ag: http://moznion.hatenadiary.com/entry/2014/08/14/124358
ag = "!git ls-files | xargs ag --pager=\"less -F -R\" --nogroup --color-match=0\\;31 --color-path=0\\;0 --no-numbers"
[http]
sslVerify = false
[gui]
# gitkの文字エンコード
encoding = utf-8
[web]
# Set in .gitconfig.local
#browser = google-chrome
[browse-remote "github.com"]
top = https://{host}/{path}
ref = https://{host}/{path}/tree/{short_ref}
rev = https://{host}/{path}/commit/{commit}
file = "https://{host}/{path}/blob/{short_rev}/{file}{line && \"#L%d\" % line}"
[credential]
helper = osxkeychain