Skip to content

使用 git 的几个技巧

Published:

本文假设你已经掌握 git 的基础知识。

如果想要系统学习 git 相关知识,可右转 https://learngitbranching.js.org/?locale=zh_CN

技巧1

使用 git 用得最多的,也是最基本的一个操作就是:

  1. 将变更的代码提交到暂存区
  2. 把暂存区的所有内容提交到当前分支。

通常我们会使用以下命令:

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 后真香)

所有带有 --globalgit config,都会写入到 ~/.gitconfig 配置文件里去。

所以你也可通过 vim ~/.gitconfig 来批量编辑 alias

技巧3

有时候我们会遇到一种情况,就是刚 commit成功,就会因为打错字等之类的原因,想修改 commit message,我猜大多数人都是 reset 后再进行重新commit

其实 git 也提供了一个方式让我们方便的修改 commit 的信息,那就是 --amend

git commit --amend

输入该命令后,会进入最新一个 commit messagevim 模式。

编辑完成后退出保存,用 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

如学习到更多的小技巧,会继续更新~

参考资料

  1. 13 Advanced (but useful) Git Techniques and Shortcuts