2015-04-02 182 views
1

我已阅读关于合并两个在一个序列中的提交,但如何合并两个不相互直接的提交。Git - 合并两个不是连续序列的提交 - 提交已经推送到远程repo

一样,我现在犯了一个老犯

承诺是SEQ

er34rwe commit4 
rtt45y5 commit3 
iwe8j89 commit2 
4E89E8J commit1 

现在,我需要与commit2合并commit4和可能的结果放在commit2的位置。这样的结果是

rtt45y5 commit3 
iwe8j89 commit2_4 <-- new one 
4E89E8J commit1 

有没有办法做到这一点,如果提交已经被推到远程仓库?并且远程存储库具有新的历史记录。即两个提交显示为一个。

回答

1

您可以为此使用交互式底座。假设er34rwe是最早提交,这样做:

git rebase -i er34rwe 

这将启动您的编辑器,这样的观点:

pick er34rwe commit4 
pick rtt45y5 commit3 
pick iwe8j89 commit2 
pick 4E89E8J commit1 

然后,您可以首先通过简单的移动修改了这些提交的顺序围绕线:

pick rtt45y5 commit3 
pick er34rwe commit4 
pick iwe8j89 commit2 
pick 4E89E8J commit1 

然后你还可以更改pick到另一个模式(它们在编辑器底部解释)来变化率T下摆。在你的情况,你想改变commit2squash将其合并到前一个(commit4 - 该文件是从顶部读/最旧到底部/最新提交):

pick rtt45y5 commit3 
pick er34rwe commit4 
squash iwe8j89 commit2 
pick 4E89E8J commit1 

然后保存并退出编辑器开始这个过程。然后,Git将重新绑定所有提交,并提示您手动合并提交消息,以完成您正在合并的这两个提交。

+0

我意识到这种方法,但我想知道如果这些提交已经被推送到远程存储库,这是否可行。对不起,没有在问题中提到。现在编辑 – Archer 2015-04-02 10:56:16

+0

重新发布已发布的提交*是*可能的,但绝对不推荐。任何解决方案都会涉及更改已发布的提交,这会违反存储库中的任何其他贡献者或用户。所以只是不要这样做,并与之共存。 – poke 2015-04-02 11:02:56

+0

..hmm,有没有办法删除远程存储库中的提交?就好像你已经建立并推动提交。它有一个重复的,最初承诺的,没有新的变化。 – Archer 2015-04-02 11:05:42