本文假设你已经掌握 git
的基础知识。
如果想要系统学习
git
相关知识,可右转 https://learngitbranching.js.org/?locale=zh_CN
技巧1
使用 git
用得最多的,也是最基本的一个操作就是:
- 将变更的代码提交到暂存区
- 把暂存区的所有内容提交到当前分支。
通常我们会使用以下命令:
git add .
git commit -m "hello commit"
但实际上有更好的方式来实现,就是使用 -am
。
-am
标志会自动执行 git add .
,然后再执行 commit。
# 等同于上面的两条命令
git commit -am "easy commit"
技巧2
git
提供了 alias
的方式来为各种命令创建别名,我们可以做一些配置,来更简洁的完成 git
命令的输入。
比如 技巧1 当中的 git commit -am "easy commit"
,通过以下命令,就可以配置一个 alias
。
git config --global alias.ac "commit -am"
然后就轻松愉快地进行 commit
了。
git ac "alias commit"
一些常用的命令都可以进行 alias
,比如 checkout -> co
(快速打出 checkout
真容易打错,改成 co
后真香)
所有带有
--global
的git config
,都会写入到~/.gitconfig
配置文件里去。所以你也可通过
vim ~/.gitconfig
来批量编辑alias
。
技巧3
有时候我们会遇到一种情况,就是刚 commit
成功,就会因为打错字等之类的原因,想修改 commit message
,我猜大多数人都是 reset
后再进行重新commit
。
其实 git
也提供了一个方式让我们方便的修改 commit
的信息,那就是 --amend
git commit --amend
输入该命令后,会进入最新一个 commit message
的 vim
模式。
编辑完成后退出保存,用 git log
就可以看到修改之后的 commit message
。
这里执行完命令后,无论有没有发生修改,都会改变原来的commit id。
技巧4
当你使用 git
正在开发一个功能的时候,如果你突然需要到另一个分支去开发却不想放弃当前的改动的时候,你可以使用以下命令:
git stash
当前改动就会被存储下来。接着,当你需要恢复他们的时候,可以这样。
git stash pop
当然,也可以为存储添加备注,方便查找。
git stash save myStash
# 查看所在stash
git stash list
# 会显示出 stash{0}: ... myStash
git stash apply 0 # 恢复上面👆的stash
技巧5
我们经常使用的 git log
命令,会随着项目复杂度的增加,输出越来越难以阅读。
可以给命令一些选项,让 git log
的输出更加生动易懂一点。
git log --graph --oneline --decorate
当然,这条命令有点长,你也可以考虑使用 alias
技巧6
对于一些无用的 commit
, 我们可以利用 git rebase
进行 commit
合并。
合并最近的 3 次 提交。
git rebase -i HEAD~3
这时候会进入到 vim
模式。
1 pick dc49274 commit1 # empty
2 pick fa1dbd7 commit2 # empty
3 pick c0f1203 commit3 # empty
4
5 # Rebase c441146..c0f1203 onto c441146 (3 commands)
6 #
7 # Commands:
8 # p, pick <commit> = use commit
9 # r, reword <commit> = use commit, but edit the commit message
10 # e, edit <commit> = use commit, but stop for amending
11 # s, squash <commit> = use commit, but meld into previous commit
12 # f, fixup <commit> = like "squash", but discard this commit's log message
13 # x, exec <command> = run command (the rest of the line) using shell
14 # b, break = stop here (continue rebase later with 'git rebase --continue')
15 # d, drop <commit> = remove commit
16 # l, label <label> = label current HEAD with a name
17 # t, reset <label> = reset HEAD to a label
18 # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
19 # . create a merge commit using the original merge commit's
20 # . message (or the oneline, if no original merge commit was
21 # . specified). Use -c <commit> to reword the commit message.
注释给出了几个命令,按照命令进行修改,
1 pick dc49274 commit1 # empty
2 s fa1dbd7 commit2 # empty
3 s c0f1203 commit3 # empty
修改完之后,就会让你修改 commit message
,正常的 message
是与之前一致,一行一个。
如果无需修改,可以直接退出。
git log
查看结果。
commit 7c0b5b3b1114d5536f9cdaf0ef703c80ad390a2b (HEAD -> git-demo)
Author: hanzhenwang <hanzhenwang@tencent.com>
Date: Mon Oct 18 15:13:35 2021 +0800
commit1
commit2
commit3
技巧7
git
有一个 -
符号,指向上一个分支(previous branch),有时候可以省去打分支名。
比如,切分支然后进行 merge
。
# 当前分支 feat-longname
git checkout test
git merge - # 这里的 - 就代表 feat-longname
如学习到更多的小技巧,会继续更新~