我有一个文件,比如foo.txt
。我添加了一行,现在它看起来像:
*existing content*
Line 1
我提交了消息"首先改变"。现在我再次打开同一个文件,并在最后添加另一行,现在它看起来像:
*existing content*
Line 1
Line 2
我承诺提供信息"第二次改变"。 git log
显示"第二次更改"作为最重要的变化,接着是"首先改变",如预期的那样。现在我要反转这两个提交,以便" First cange"在顶部,"第二次改变"排在第二位。
我尝试用git rebase -i
做这件事,我得到了连续的合并冲突,我正在解决这个问题。但在那之后,我只剩下一次提交,#34;第二次改变","第一次改变"提交,我想在顶部,现在丢失了。
我该怎么做?
答案 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.txt
和git rebase --continue
。
完成了rebase,文件现在采用了我上一次冲突解决方案中的形式。
1 出现|||||||
到=======
部分,因为我merge.conflictStyle
设置为diff3
。这告诉我共同的祖先是什么。它在真正的合并期间最有用 - &#34;合并基础&#34;一个樱桃挑选有点怀疑 - 但我喜欢随时保持它。
2 我省略了为旧提交的新副本编写新提交消息的编辑器会话,因为它们与最终结果无关。 (请记住,git rebase
是复制提交。一旦rebase完成,ORIG_HEAD
会记住原始的,rebase-copy复制,提交;当前的分支名称现在找到新的,复制后提交。)