2017-02-10 34 views
2

试想一个Git仓库有如下的提交:挤压提交后它们被推

Fixed issue 3    123eabc 
Fixed issue 2 (part 2)  fa23b79 
Fixed issue 2 (part 1)  7bea5cc 
Fixed issue 1    0d229f4 

这些都推到远程主了。现在是否有办法重写历史记录并将中间两个合并为一个提交?类似于

Fixed issue 3    123eabc 
Fixed issue 2    9d23e0c 
Fixed issue 1    0d229f4 
+2

你*可以*,但问题是*应该*你?任何从主人那里取消的人都需要被通知重新提交重写的历史记录。 – chepner

回答

3

一种选择是做一个交互式重新分配,在其中压缩两个问题2提交在一起。

git rebase -i HEAD~4 

这告诉Git,你想做一个交互式重新分配涉及到四个提交,包括从你的分支头向后计数。这将显示一个列表看起来像以下:

pick 0d229f4 Fixed issue 1 
pick 7bea5cc Fixed issue 2 (part 1) 
pick fa23b79 Fixed issue 2 (part 2) 
pick 123eabc Fixed issue 3 

注意最古老承诺出现第一,以及最近的四次提交的出现最后

更改pick为中提交部分2要与第一部分相结合,squash

组合提交标记 squash到commit 它上面,在这种情况下,合并
pick 0d229f4 Fixed issue 1 
pick 7bea5cc Fixed issue 2 (part 1) 
squash fa23b79 Fixed issue 2 (part 2) 
pick 123eabc Fixed issue 3 

挤压手段第2部分到第1部分。

然后保存此文件并退出编辑器,并完成rebase。

注意:重写公共分支的历史记录可能会导致除使用此分支的人之外的任何人出现问题。因此,如果这种情况适用于您,您可能需要避免使用此答案。

+0

优秀的答案。我有一个后续问题http://stackoverflow.com/questions/42820476/what-happens-to-the-squashed-changes-in-git – Merik