Git
プロトコル
https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols
- Local Protocol
git clone path/to/repo
git clone file:///path/to/repo
- HTTP Protocols
git clone https://example.com/gitproject.git
- SSH Protocol
git clone ssh://[user@]server/project.git
git clone [user@]server:project.git
- Git Protocol … 最も高速だが、認証がない
git clone git://server/project.git
参考:
config
https://git-scm.com/docs/git-config
aliasの設定
Examples:
[alias]
st = status
dfc = diff --cached
Tips:
- 右辺を
!
から記述すると外部コマンドを記述できる
参考:
include
別ファイルをincludeできる
[include]
path = .gitconfig.local
参考:
includeIf
条件に基づいて別ファイルをincludeする。
参考:
pull
https://git-scm.com/docs/git-config#Documentation/git-config.txt-pullff
pull時の挙動を設定する。
[pull]
# 以下いずれかを指定
ff = only # fast-forwardなマージのみ許可。マージコミットを作らない
ff = false # fast-forwardなときもマージコミットを作る
rebase = merges # rebaseする。ローカルのマージコミットは消失
rebase = preserve # マージコミットを保持してrebaseする
- コミット履歴をきれいに保ちたいなら
rebase = merges
だが、リモートと歴史が変わってしまったときにローカルの履歴が失われるリスクがあると思う。rebase = preserve
なら大丈夫かもしれない ff = only
は無難な設定ff = false
を設定したい理由はわからない
関連項目:
参考:
How-to
See also gitコマンド
git diffをpatch適用する
2020-06-20記入。
git diff > foo.diff
git apply foo.diff
今はこれでよいようだ。
メモ:
- 昔はgit diffにオプションをつけて、patchコマンドを使ってapplyしていたが、簡単になったものだ。
参考:
CommitterとAuthorを変更する
HEADのcommitを修正する場合:
git config --local user.name "YOUR NAME"
git config --local user.email [email protected]
git commit --amend --reset-author
過去の履歴についても変更したい場合:
git rebase -i <commit hash>
# 該当するコミットを `e` で選ぶ
git commit --amend --reset-author
git rebase --continue
参考:
歴史を改ざんする
See Git - 歴史の書き換え
特定のファイル・ディレクトリの履歴を完全に削除
## file
git filter-branch --tree-filter 'rm -f path/to/file' HEAD
## directory
git filter-branch --tree-filter 'rm -rf path/to/dir/' HEAD
参考:
マージコミットを cherry-pick
merge commit を cherry-pick
git cherry-pick -m 1 <merge commit のハッシュ>
参考:
マージ済みブランチを掃除する
色んな人がやっていて、aliasに設定したりサブコマンドを作ったりしている。
自分でも2020-05-04に作った。
参考:
特定のファイルを Git 管理対象から除外する
①.gitignore
や .git/info/exclude
を使う
②既に Git 管理下にあるファイルをワーキングツリーで敢えて除外する
git update-index —assume-unchanged [ファイル名]
git update-index —skip-worktree [ファイル名]
## 確認
git ls-files -v
## 取り消し
git update-index —no-assume-unchanged [ファイル名]
git update-index —no-skip-worktree [ファイル名]
git ls-files -v の表示:
- assume-unchanged 設定のファイルは、状態が小文字で表示される
- skip-worktree 設定のファイルは、状態が S と表示される
参考:
リポジトリをサブディレクトリで分割
サブディレクトリが1つの場合
git clone original_dir new_dir
cd new_dir
git filter-branch --subdirectory-filter sub_dir_name HEAD
参考:
サブディレクトリが複数の場合
参考:
Topics
コミットメッセージの書き方
長さ:
- よく知られているガイドラインは50/72ルールというもので、タイトル行を50文字以内に、そのあと1行空けて、続くメッセージは1行が72字以内に収まるように書くというもの
文法:
- タイトル行は命令形で書くのがいいらしい
参考:
最終更新 2020-06-30: [git] Write about commit message length (223f55b8c)