Git 学习笔记 - 17 - Rebase

Git 学习笔记 - 17 - Rebase

注:本文参照的是廖雪峰老师的Git教程

概述:

之前有用到 git log --graph --pretty=oneline --abbrev-commit 命令去查看分支变化的轨迹,我们可以看到整个轨迹是弯弯曲曲的,特别是经历了多人协作后,遇到冲突问题,先pull下来,然后push上去,会变得更加难看,要想强迫这个轨迹变得整洁一点,可以使用 rebase 命令。

我这边在dev上新建了一个分支testhello,然后在这个testhello分支上修改hello.py文件,然后合并到dev分支上去,然后又合并到master分支上,加上之前的操作,看起来就有点弯弯曲曲了。

ps:其中在合并到master分支上时,进入了一个我没怎么注意的界面,没看懂,然后我就直接输入 :Q! 就退出了,不过没影响合并。

ps:我擦,我没使用 --no-ff 的,直接把dev给合并上去了…

杂乱的轨迹

操作:

教程上说的是多人协作引起的轨迹不好看:

在和远程分支同步后,我们对hello.py这个文件做了两次提交。用git log命令看看:(还是之前的带参数的老命令)

* 582d922 (HEAD -> master) add author
* 8875536 add comment
* d1be385 (origin/master) init hello
*   e5e69f1 Merge branch 'dev'
|\  
| *   57c53ab (origin/dev, dev) fix env conflict
| |\  
| | * 7a5e5dd add env
| * | 7bd91f1 add new env
...

注意到Git用(HEAD -> master)(origin/master)标识出当前分支的HEAD和远程origin的位置分别是582d922 add authord1be385 init hello,本地分支比远程分支快两个提交。

现在我们尝试推送本地分支:git push origin master

To github.com:michaelliao/learngit.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:michaelliao/learngit.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

很不幸,失败了,这说明有人先于我们推送了远程分支。按照经验,搞定它,这时加上刚才合并的提交,现在我们本地分支比远程分支超前3个提交。

git log --graph --pretty=oneline --abbrev-commit看看:

*   e0ea545 (HEAD -> master) Merge branch 'master' of github.com:michaelliao/learngit
|\  
| * f005ed4 (origin/master) set exit=1
* | 582d922 add author
* | 8875536 add comment
|/  
* d1be385 init hello
...

对强迫症童鞋来说,现在事情有点不对头,提交历史分叉了。如果现在把本地分支push到远程,有没有问题?

有!

什么问题?

不好看!

有没有解决方法?

有!

这个时候,rebase就派上了用场。我们输入命令git rebase可以整理。

ps:测试失败,后续想了想或许我应该在master上造一个冲突,这样的话或许会看到结果。

总结:

  • rebase操作可以把本地未push的分叉提交历史整理成直线;
  • rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值