2017-11-18 157 views
1

假设我在本地分支A上有以下提交,然后我将其推送到远程分支。从主分支中提取其他提交后,Git压缩提交

commit 1 
commit 2 
commit 3 
commit 4 

现在,我从远程主拉,并提交历史看起来是这样的 -

//From branch A 
commit 1 
commit 2 
commit 3 
commit 4 
//From master 
commit 5 
commit 6 

如果我现在要2和3使用Git变基-i和git推动壁球提交 - f,那么重写是否会提交5和6?如果是的话,有没有办法可以压缩我之前的提交而不重写我从主分支中提交的提交?我是Git的新手,所以请原谅我是否缺少一些非常基本的东西。

回答

2

如果您位于功能分支中并重新绑定到主设备上,则重做将不会重写那些提交。如果你的rebase范围碰巧提交了第5个和第6个,那么他们会被复制和修改,但是你不会失去任何东西。这是一个正常的操作,git不会更改就地提交,新创建的任何所需的更改。在功能分支内部运行git rebase -i master将复制功能分支的唯一提交,然后在分支的更新版本上重新应用它们。

假设提交6是你的HEAD,提交5和6基本上被删除,并且在分支的基础被更新时重新出现在提交1之前。然后根据您的指示重放提交1-4。

但是,如果提交1是你的头,git rebase -i master将撤销提交1-4,并与您的壁球指令重放一遍,产生了新的历史记录:6 < - 5 < - 4 < - 1' ,其中承诺2人和3人被压扁,5人和6人未受影响。

更多关于rebasing的细节和更好的解释可以找到here

+0

工作,谢谢!在你答案的第二部分中,我假设你的意思是“如果第4条是你的头,......”(即第5条和第6条还没有从主方拿来)? – ankit0311

+0

它可能是。我假设你是从你的第二个例子开始的,在“现在,我从远程主人拉”之后。美丽的部分是解决方案工作原理相同:)。 – Blue

0

如果你做什么你建议的提交56然后内容将保持不变(如果不会有变基冲突),但他们的哈希会有所不同,因为他们的父母会发生变化。因此它不会再承诺56,但是具有相同内容的不同。如果您确定没有其他人正在使用该远程分支,那么强制推送是可以的,否则您将重写他已经从remote中提取的内容。我个人不会这样做remote/master

相关问题