有没有办法冲突合并同一分支的过去的提交?

时间:2019-05-07 04:03:59

标签: git git-merge git-checkout

这是交易:

我正在处理一个家庭作业文件。我checkout将存储库编辑到学校计算机中,并在该存储库中添加了注释。但是在合并注释之前,我对部分源代码进行了更改。当我合并两个分支时,我使用git checkout --ours来保存分支A的更改部分和分支B的注释部分。更糟糕的是,合并后甚至进行了更多更改。

所以它基本上是这样的

Source code          Source code  
-----------          ----------- 
Part A         ->    Part A Change source         
-----------          -----------  
Part B               Part B         
-----------          -----------   

                     Source code  
                     ----------- 
               ->    Part A         
                     -----------  
                     Part B Comments         
                     -----------       

这应该已经合并到

Source code        
-----------        
Part A Change source  And then More changes      
-----------          
Part B Comments                
----------- 

但是它变成了

Source code        
-----------        
Part A Change source  And then more changes    
-----------          
Part B                 
----------- 

现在,我尝试通过git merge 6883dbbb(评论标签)进行合并冲突,但显示

Already up to date. 

我已经看到许多答复,建议检查分支。但是,我希望部分反转单个文件。因为我在初始合并后添加了(并希望保留)更多更改,所以我无法签出合并点。对这个问题有什么建议吗?谢谢。

| *   commit 4a51c9ac25e88f29b57d345ec294413e0969f1b6
| |\  Merge: 98b00f5 688a3db
| | | Author: 
| | | Date:   Tue May 7 00:51:21 2019 +0900
| | | 
| | |     complete merge
| | | 
| | * commit 688a3dbbbf7dab71703bb3107f0d4451cf85da88
| | | Author: 
| | | Date:   Sun May 5 03:02:39 2019 +0900
| | | 
| | |     HW4 report initial finish part 1 & comments
| | | 
| * | commit 98b00f5db8844251b13dc98ac5d6314d4fc4180f
| | | Author: 
| | | Date:   Tue May 7 00:39:35 2019 +0900
| | | 
| | |     confirm everything works
| | | 
| * | commit a89a77a64336dad49d124a2e8470b84764b9660d
| | | Author:  
| | | Date:   Sun May 5 17:08:26 2019 +0900
| | | 
| | |     move testcase
| | | 
| * | commit 40c4977a813088c910c54002cd9ca56eb880f722
| |/  Author: 
| |   Date:   Sun May 5 17:07:01 2019 +0900
| |   
| |       fix bubble
| | 

2 个答案:

答案 0 :(得分:1)

您拥有的内容有效地与您合并后的内容相同,然后恢复了合并。也就是说,git认为分支上的提交是“已解决”的,但是更改被撤消了。 (不同之处在于合并本身取消了更改,而不是以后的提交,但是效果是相同的。)

要解决这种情况,您需要创建新的提交来模仿分支上的提交。最简单的方法是使用git rebase -f

唯一的麻烦是,您需要确定分支与master分叉的提交(或“上游”分支的任何位置;为了讨论起见,我们将说master)-而且执行此操作的“明显”方法(如merge-base)将无法正常工作,因为现在可以从master访问整个分支。但是,如果您知道这只是一次提交,那就足够简单了:

git checkout branch
git rebase -f HEAD^

现在您可以再次合并branch

答案 1 :(得分:-1)

我只是用注释手动重新创建提交:

git format-patch 6883dbbb --stdout | patch -p1
git commit -a -m 'Re-applied comments commit'