git rebase重新排列涉及相同文件的提交

时间:2017-03-22 13:49:19

标签: git git-rebase

我有一个文件,比如foo.txt。我添加了一行,现在它看起来像:

*existing content*
Line 1

我提交了消息"首先改变"。现在我再次打开同一个文件,并在最后添加另一行,现在它看起来像:

*existing content*
Line 1
Line 2

我承诺提供信息"第二次改变"。 git log显示"第二次更改"作为最重要的变化,接着是"首先改变",如预期的那样。现在我要反转这两个提交,以便" First cange"在顶部,"第二次改变"排在第二位。

我尝试用git rebase -i做这件事,我得到了连续的合并冲突,我正在解决这个问题。但在那之后,我只剩下一次提交,#34;第二次改变","第一次改变"提交,我想在顶部,现在丢失了。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您可能需要展示更多自己的流程。

我创建了一个小型存储库和一个文件foo.txt,在两次提交中添加了这两行,然后运行git rebase -i并交换它们:

pick f196c5b second change
pick 8d6ad6a first change

导致: 1

1
2
3
4
5
6
existing content
<<<<<<< HEAD
||||||| parent of f196c5b... second change
Line 1
=======
Line 1
Line 2
>>>>>>> f196c5b... second change

我现在必须手动解决。我应该选择什么?我想是这样的:

1
2
3
4
5
6
existing content
Line 2

所以我编辑文件以获得该文件并退出编辑器git add foo.txt,然后运行git rebase --continue; 2 并且我得到另一个冲突,导致:

1
2
3
4
5
6
existing content
<<<<<<< HEAD
Line 2
||||||| parent of 8d6ad6a... first change
=======
Line 1
>>>>>>> 8d6ad6a... first change

我该如何解决这个问题?我认为答案是保持Line 2 HEAD,同时保持Line 1 8d6ad6a... first change。这取决于我将这些行放入什么命令,但我想我会使用:

1
2
3
4
5
6
existing content
Line 2
Line 1

所以我将其写入文件,退出编辑器git add foo.txtgit rebase --continue

完成了rebase,文件现在采用了我上一次冲突解决方案中的形式。

1 出现|||||||=======部分,因为我merge.conflictStyle设置为diff3。这告诉我共同的祖先是什么。它在真正的合并期间最有用 - &#34;合并基础&#34;一个樱桃挑选有点怀疑 - 但我喜欢随时保持它。

2 我省略了为旧提交的新副本编写新提交消息的编辑器会话,因为它们与最终结果无关。 (请记住,git rebase复制提交。一旦rebase完成,ORIG_HEAD会记住原始的,rebase-copy复制,提交;当前的分支名称现在找到新的,复制后提交。)