1. 配置用户信息
git config --global user.name <name>
git config --global user.email <email_address>
2. 配置高亮显示
git config --global color.ui auto
使用auto的高亮配置比较省事。
3. 配置git log
git config --global log.decorate short
decorate选项设置成short,这样在commit message上会显示对应的ref name。(省略前缀refs/heads/, refs/tags/ and refs/remotes/)
4. 配置git send-email
git config --global sendemail.smtpserver <smtpserver>
git config --global sendemail.confirm always
git config --global sendemail.suppresscc all
confirm选项设置成每次发送总会提示确认信息。suppresscc选项设置成完全禁止auto cc,这样就不会通过检查commit message自动添加email到CC list里了。
5. 查看图形化的提交历史
git log --graph --oneline
6. 查看merge的信息
只查看merge提交。
git log --merges --oneline
对于merge,在commit信息中会显示两个分支在merge前的commit。
$ git show c1ef57a
commit c1ef57a3a3f5e69e98baf89055b423da62791c13 (HEAD -> master)
Merge: ed535f2 2faf852
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date: Thu Feb :: + Merge tag 'io_uring-5.6-2020-02-05' of git://git.kernel.dk/linux-block
[...]
查看两个分支的共同祖先。
git merge-base ed535f2 2faf852
7. 为连续的commit生成patch
git format-patch <base_commit>..<latest_commit>
不包含base_commit。
8. cherry-pick连续的commit
git cherry-pick <base_commit>..<latest_commit>
不包含base_commit。使用-n选项的话,可以在cherry-pick的过程中不提交commit,而是cherry-pick全部完成后手动提交一个commit。
9. git merge
git merge --no-ff <branch/tag/commit>
fast-forward merge
从master branch创建一个devel branch来接收commit提交,而master上不再有commit提交。master在merge devel的时候,就可以进行fast-forward merge,将devel上的每个commit都apply到master上并且保持commit ID不变,最后不再创建merge commit。
non-fast-forward merge
这是常用的merge方式,创建一个merge commit,在该merge commit上merge devel branch上的代码改动。使用选项--no-ff。
10. git tag
git tag -a <tag_name> <commit_id>