Git常用命令 - 随时更新

时间:2023-03-08 17:41:52
Git常用命令 - 随时更新

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>