2015-03-25 68 views
0

另外的路径我有一个混帐历史,看起来像这样如何删除混帐

F - G - H 
/   \ 
A - B - C - D - E 

,现在为了清楚起见,我只是想完全摆脱了F-G-H路径的问题。

我该如何做到这一点?


后期编辑1 - 试着让自己更清楚,我并不需要在路径上保持什么,所以我想有什么最终只是

A - B - C - D - E 

后编辑2 - 同样,我也不假定E的右侧,那里可能会有更多的变化,从E开始,不想改变。

我不是很熟悉rebase,它可以这样做吗?

+0

只删除那些提交的分支 – 2015-03-25 11:14:46

+0

@TimCastelijns这不会改变历史。 – Agis 2015-03-25 12:11:33

回答

0

F G和H提交包含不在E提交中的更改。 E提交是一个空的提交(除非有冲突),只是在这里作为合并提交,它有两个父母。

您可以使用rebase命令使您的历史线性化,但是您的F G和H提交仍会再次出现。

+0

好吧,如果你正在重新设计,你可以把它们压到E中,你不需要保留F,G,H。 – filmor 2015-03-25 12:49:41

+0

所以是的,我想我想要做的事情看起来有点像从A到E在上面的道路上,并将其压缩成一个变更集,这是你的建议? – parmentelat 2015-03-25 20:13:02

0

如果您想保留来自F,G和H的更改,但不希望在历史记录中进行实际合并,那么您想要进行压缩合并,这不是实际合并,而是创建一个来自合并分支的所有更改的新提交被压扁。

你需要先撤消实际的合并(E):

git reset --keep HEAD^ #assuming you're on E 

然后,你可以这样做:

git merge --squash H 
git commit 

而且你的历史是这样的:

F - G - H 
/   
A - B - C - D - E 

但是E确实从F,G和H发生了变化。在此之后,您可以删除指向H的分支,并且它看起来像分支是nev呃那里,但变化仍在历史中。