前言
汇总下我在项目中高频使用的git命令及姿势。
不是入门文档,官方文档肯定比我全面,这里是结合实际业务场景输出。
使用的 Git版本:git version 2.24.0
git log
查看日志,常规操作,必备
1 | # 输出概要日志,这条命令等同于 |
git status
查看工作区状态的东东,不如GUI直观,但是命令行也有一些用的
1 | # 等同 git status --long,查看当前工作区暂存区变动 |
git checkout
用来切换到对应记录的,可以基于分支,提交,标签。
切提交和标签一般用来热修复或者老版本需要加新特性。
1 | # 分支切换 |
git commit
天天打交道的命令,这里说一些很常见的姿势
1 | # 新修改的内容,添加到上次提交中,减少提交的日志 |
git reset
不得不说,代码回滚中这个命令也是用的很多,而且是 --hard
1 | # 硬性回滚,简单粗暴,直接抛弃回滚之后改动(log 还是有保留,内容不要而已) |
git revert
一般用于master 的代码回滚,因为多人在上面协作,revert
可以平稳的回滚代码,但却保留提交记录,不会让协作的人各种冲突!
1 | # 回滚到某个 commit |
git rebase
变基在项目中算是很频繁的,为什么这么说。
比如你开发一个新的 feature, 遵循最小化代码提交的理念。
在整个功能开发完毕的时侯,会有非常多的 commit,用 rebase
可以让我们的commit记录很干净
1 | # 带 -i 可以进入交互模式,效果如下 |
- pick: 是保留该 commit(采用)
- edit: 一般你提交的东西多了,可以用这个把东东拿回工作区拆分更细的 commit
- reword: 这个可以重新修改你的 commit msg
- squash: 内容保留,把提交信息往上一个 commit 合并进去
- fixup: 保留变动内容,但是抛弃 commit msg
- drop: 用的比较少,无用的改动你会提交么!!!
突然发现截图还有几个新的行为,估计是新版本带来的,从字面上就可以看出来大体的意思, 就是把回滚和打标签这些放到变基中简化操作。
温馨提示
- 本地提交之前,最好把基准点变为需要合并的分支,这样提交 PR/MR 的时侯就不会冲突(本地来解决冲突)
- 不要在公共分支上变基!!!一变其他协作者基本都一堆冲突!除非你们有很清晰的分支管理机制
git merge
1 | # --ff 是指fast-forward命令,当使用ff模式进行合并时,将不会创造一个新的commit节点。 |
git pull
git pull中用的最多是带--rebase(-r)
的方式(变基形式拉取合并代码),保持分支一条线。
默认的pull会走ff模式,多数情况会产生新的commit,部分参数与 merge提供一致。
git push
当本地分支存在,远程分支不存在的时侯,可以这样推送关联的远程分支
1 | # 这样会直接新建一个同名的远程分支 |
git remote
这个东西用在你需要考虑维护多个地方仓库的时侯会考虑,或者修改仓库源的时侯
1 | # 常规关联本地 git init 到远程仓库的姿势 |
git branch
该命令用的最多的就是删除本地分支,重命名分支,删除远程分支了
1 | # 分支删除,拷贝,重命名,参数若是大写就等同多了--force,强制执行 |
git stash
暂存用的最多时侯就是你撸代码撸到一半,突然说有个紧急 BUG 要修正。
或者别人在你这里需要帮忙排查代码,你这时候也会用到。
强烈建议给每个 stash 添加描述信息!!!
1 | # 缓存当前工作区的内容到stashName, save 这个现在不怎么推荐用,图方便也能用 |
git reflog
这个命令的强大之处,是记录了所有行为,包括你 rebase
,merge
, reset
这些
当我们不小心硬回滚的时侯,或变基错了都可以在这里找到行为之前的commit,然后回滚。
当然这个时间回溯也只在本地有用,你推送到远程分支的破坏性改动,该凉还是得凉。
1 | # 最近五次行为,不带-n 则默认所有 |
git cherry-pick
这个东西你可以理解为你去买橘子,你会专门挑一些符合心意的橘子放到购物篮中。你可以从多个分支同时挑取部分需要的 commit 合并到同一个地方去,是不是贼骚。这货和变基有点类似,但是仅仅类似,挑过来的 commit 若是没有冲突则追加。有冲突会中断,解决后 --continue
1 | # 在当前分支挑其他分支的 commit,把那部分的变动那过来 |
git rm
这个命令在旧的版本用的比较最多的姿势是为了重新索引.gitignore 的范围
1 | # 删除某个文件的索引 |
git rev-parse
这个估计一般人用的不是很多,可以通过这个快速获取部分git 仓库的信息
我在弄脚本的时侯就会从这里拿东西
1 | # 获取最新有效的commit |
git diff
对于这个命令,在终端比对用的不是很频繁,除了少量改动的时侯可能会用这个看看。
其他情况下我更倾向于用 GUI 工具来看,因为比对更加直观。
总结
git 的常用命令其实很好掌握,很多命令都有 Linux 的影子。
列出来的命令都是高频使用的,或许有一些更骚的姿势没有摸索到