作为一线工程师的你,对于 git一定不会陌生,git 作为一个开源的分布式版本控制系统,有着广泛的用户基础。git 使用有很多可视化的工具,idea 自身也大多都集成了 git 套件,如下:
不过相比于这些可视化工具,我更喜欢使用命令行的方式。
本篇背景也是源于实际工作,一个同学遇到的问题是:他从 master 分支自己拉了一个开发分支,但是由于时间很长,所以在提交之前他执行了:
git pull
然后 push ,当提交 mr 时发现,自己的提交里有很多别人的 commit 记录。ok,这里背景交代清楚,我们通过一个实际的 case 来看看。
在执行 git pull
之前,先看下 git log
执行 git pull
之后
所以可以非常明显的看到,git pull 操作中有把 master merge 到当前 dev,实际上 git pull 是下面两个指令的整合:
git pull = git fetch + git merge
那既然是 merge,所以 dev 中后续的提交,都会带上此次 merge 的 commit 记录;
这就是那位同学遇到的问题。如果我们不想让自己的提交中含有其他无关的 commit 怎么办?此时就需要 rebase 出场了。
两次提交记录;这里基于前面提到的 git pull 行为,如果我们期望 rebase-dev 的提交不包括 rebase-dev2 的提交,但是从 log 看, rebase-dev 已经在最新 commit 后面了
image.png
git rebase 本质上是需要给 rebase-dev 变基,就是将基线拉到最新 commit 之前,在 rebase-dev 分支下,执行 git rebase master
,此时再观察下 log
可以看到 rebase-dev 已经跑到上面了,下面在 rebase-dev 做修改提交
可以看下,此时提交就没有 rebase-dev2 的 commit 记录了。
所以你学废了吗?
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有