Git関連
.gitconfig
定番で入れておきたい設定をメモ
user.name=eichisanden
user.email=eichisanden@users.noreply.github.com
pull.rebase=true
init.defaultbranch=main
rerere.enabled=true
core.pager=delta
delta.line-numbers=true
delta.side-by-side=true
コミットログを検索する
git log --grep キーワード
で検索可能。
$ git log --grep 17269
commit 11b77ba496ed8feea2be8d87c55073d0cd4bddd4
Author: eichisanden <eichisanden@example.com>
Date: Mon Feb 27 13:40:49 2017 +0900
#17269 ログインIDを表示していない(columnsの配列にログインIDのレコードがない)場合は重複チェックしないように修正
またログインIDが表示されているが、未入力の場合は空文字で存在チェックされていたが、チェックしないよう修正
指定した種類の変更だけを git diff したい
git diff --diff-filter=M
A (追加)、C (コピー)、D (削除)、R (リネーム)、などが指定可能
指定した種類の変更をしたコミットを git logで見たい
git log --diff-filter=D --summary
A (追加)、C (コピー)、D (削除)、R (リネーム)、などが指定可能
指定した時点のファイルの中身を確認したい
git show コミットハッシュ値:/path/to/file
特定のリビジョンのファイルに対して、それぞれの行がどのリビジョンまで存在していたかを確認確認する
git blame --reverse を用いると、「特定のリビジョンのファイルに対して、それぞれの行がどのリビジョンまで存在していたか」を取得できます。
git blame --reverse START..END /path/to/file
上の例においては、START リビジョンにおける /path/to/file のそれぞれの行に対して、指定されたリビジョン範囲の中で、最後にその行が存在していたリビジョンを blame で求めることができます。
git log -p を正規表現で絞りこむ
git log -p -G 正規表現
指定したコミットを含んでいるブランチを調べる
git branch -a --contains コミットハッシュ値
今回のバージョンで変更したファイルの一覧を見たい
git diff feature-a master --name-only
マージ済みのブランチを一括削除するワンライナー
git branch --merged |grep -v '*'|xargs -I % git branch -d %
origin/xxx
ブランチ)を一気に削除したい
GitLab上ではすでに削除されている追跡ブランチ(下記のコマンドで一気に削除可能です。
git fetch --prune
git config --global fetch.prune true
で、 git fetch/pull
時に常に実行させることも可能。
追跡ブランチを確認&設定したい
下記のコマンドで確認できる。[]内に追跡中のブランチが表示される。feture1は追跡ブランチがない状態。
git branch -vv
master 2053e2a [origin/master] Merge branch 'feature-a' into 'master'
feture1 cb8f5e7 コメントを修正
設定は下記コマンドで行う
# 追跡させたいローカルブランチにcheckoutした状態で
git branch --set-upstream-to=origin/[ブランチ名]
# オプションは -u という省略形があります
git branch -u origin/[ブランチ名]
# または、push 時に -u オプションをつける
git push -u origin [ブランチ名]
自分用の.gitignoreを指定したい
ホームディレクトリに .gitignore
ファイルを置いて git config
に登録しましょう。
git config --global core.excludesfile ~/.gitignore
個人的に無視したいファイルを登録しても良いですし、古いバージョンには .gitignore
をコミットしてないので古いブランチをcheckoutする方は登録する良いかと。
空フォルダをリポジトリで管理したい
Subversionと違って空フォルダをコミットできません。 .gitkeep
というファイル名で0バイトのファイルを置くのが慣例ですのでそれに従いましょう。
特定のファイルだけstashしたい
git add -p
と同じように差分を見ながら指定可能。
git stash -p
stash から特定のファイルを取りだしたい
git checkout stash@{[番号]} [ファイル名]
- 番号は
git stash list
で調べておく
$ git stash list
stash@{0}: WIP on duplicate_mail_attach_item: working
stash@{1}: On duplicate_mail_attach_item: gitattr
stash@{2}: On duplicate_mail_attach_item: wip
ブランチとタグの名前が被っている場合の削除方法
ブランチを消す時に git push origin :<branchname>
とやるとエラーになるので下記のように削除する。
上記で対応できますが、ブランチ名とタグ名はぶつからない命名ルールにしましょう。
git push origin :refs/tags/<tag_name>
git push origin :refs/heads/<branch_name>
改行コードの違いを無視してDIFFしたい
w
オプション付きで git diff
を実行することで可能。
git diff -w
git diff --cached -w
行の一部分の変更を見やすくDIFFしたい
--word-diff
オプション付きで git diff
を実行すると、変更前が [-○○○-]
、変更後が {+○○○+}
と並んで表示される。
debug.log('Hello, [-World-]{+Tokyo+}');
自動変換された改行コードを戻してpullしたい
git config --global core.autoCRLF false
をしていてもダメな場合はcloneし直しでもいいけど以下のコマンドで対処できる
(git ls-files | xargs git rm -rf) && git reset --hard
gitで管理対象のファイルを一旦すべて消してresetして最新commitに戻してる(やってることは再cloneと同じ)。
コンフリクトを解決した内容を記録しておきたい
rerereを有効にしておくと2回目は自動で同じ修正を取り込んでくれるのでコミットするだけで済む。
git config --global rerere.enabled true
と打つか、コンフィグに追加する
rerere.enabled=true
Diffが1行ずれないようにしたい
※ある時点でindent-heuristicオプションがデフォルト有効になったので気にしなくて良い
以前までは、例えばfor文を1つ追加したのに、直後におなじような文があるとDiffを見ると1行ずれてしまいました。
for i := 0; i < 10; i++ {
+ fmt.Println(i)
+}
+ for i := 0; i < 10; i++ {
list = append(list, i)
}
git diff --indent-heuristic
git 2.11からは--indent-heuristic
オプションを付けると正しくDiffされるようになりました。
+for i := 0; i < 10; i++ {
+ fmt.Println(i)
+}
for i := 0; i < 10; i++ {
list = append(list, i)
}
git configでデフォルトにすることも可能です。
git config --global diff.indentHeuristic true