git中的rebase操作

假设你在你的项目master分支上(我们只显示最后4个提交):

640?wx_fmt=png&wxfrom=5&wx_lazy=1

 

现在你想在不同的分支上开发一些很酷的新功能,所以你创建一个git checkout -b feature分支并进行两次提交。现在你master和feature分支看起来是这样的:

 

640?wx_fmt=png

 

但是现在有人告诉你你的应用程序存在一个bug,并且你很快就会将你的分支(checkout)切换到你master分支来查找并修复这个bug。一段时间后,您修复它并推送(并部署)更改。你可以回到你的feature分支。

 

640?wx_fmt=png

 

但是现在你意识到你有一个小问题。您的feature分支仍然存在您在master分支上修复的相同错误,并且您意识到该错误也会影响feature分支上的新代码,因此您需要将这些错误修复(提交)合并到feature分支中。但是该如何?在做feature分支之前进行错误修复。这样,具有修复代码的提交在feature分支中。你用rebase命令来做。所以,如果你在你的feature分支,你会这样做:

 

git rebase master

这就是你的分支会如何看起来像之后的样子:

640?wx_fmt=png

 

 

如你所见,feature分支的历史已经改变。如果有人现在看它,认为你feature在错误修复提交后制作了你的分支。

 

所以这很好?但有一个问题。git rebase会改变git的提交记录,但不用担心,你的代码将保持不变,只有feature分支上的提交的提交记录会改变。这些提交记录是什么?git log,你可能会注意到,当你这样做时,你看到每个提交都有40个字符的长字符串:

 

commit f5cad47722bc98419fe5037753f5bbe29d3917c4
Author: John Doe <john@doe.com>
Date:   Mon Apr 23 11:49:07 2018 +0200

 

如果提交之前提交记录是这样的:

 

640?wx_fmt=png

 

然后在rebase之后,feature分支上的提交记录会改变:

640?wx_fmt=png

 

这就是为什么你一直听到git rebase是一个危险的命令。因为它改变了历史,你应该谨慎使用它。

 

但为什么这是危险的?那么,让我们假设你不是唯一一个在这个feature分支上工作的人,但是有更多的人在对它进行改变。现在你可以写你的代码将更改推送到feature远程。现在,当你的同事试图从远端拉动时feature,这个时候会发生代码冲突,因为他的本地feature分支版本的历史与远端版本不同。

 

640?wx_fmt=png

 

所以同事代码冲突,但是他没有好的办法来解决这个问题。所以,如果您在本地分支上工作,并且尚未将其推送到远程服务器,或者您做了,但仍然只有您在该分支上工作的您,那么你可以使用rebase。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值