Git在主分支和过时分支之间合并,但与新闻行功能分支合并,合并结果错误



主分支:

-test.txt
-A
-B
-C
-D

功能分支:从主分支,并在新行中添加-E

同时,删除了主分支上的-C行。

现在,如果我想做一个拉请求,首先我将当前的主分支合并到我的功能分支。但是,在合并冲突1中,我只能选择结果为ABD(主分支(或ABCDE(功能(。

我期望结果看起来像";ABDE";。(从主分支更新,但也从功能分支添加新行E(

为了达到预期的结果,我需要做什么?提前感谢

我希望结果看起来像"ABDE";。为了达到预期的结果,我需要做什么?

编辑文件,使其看起来像";ABDE";,添加文件并提交。

从开始到结束的合并冲突

设置

为了便于显示,我创建了以下git别名。(所有以$开头的行都输入终端:

$ git config --global --add alias.lx "log --all --decorate --oneline --graph"

Init+提交

$ mkdir test && cd test
$ echo -e 'AnBnCnD' > test.txt
$ git init
$ git add test.txt
$ git commit -m "Initial ABCD commit"

功能分支

$ git checkout -b feature
$ echo 'E' >> test.txt
$ git commit -am "Add feature E"

返回主屏幕

$ git checkout main
$ echo -e 'AnBnD' > test.txt
$ git commit -am "Remove feature C"

冲突(?(

git --version2.35.1上,我无法再现您的冲突:

$ git merge feature
Auto-merging test.txt
Merge made by the 'ort' strategy.
test.txt | 1 +
1 file changed, 1 insertion(+)
$ cat test.txt 
A
B
D
E
$ git lx
* 248cb4c (HEAD -> main) Merge branch 'feature' into main
|
* | 64d82c9  Remove feature C
| * c8038f5 (feature) Add feature E
|/  
* fb88cb0 Initial ABCD commit

因此,在这个简单的例子中,Git足够聪明,能够找到一个很好的方法来组合这两种更改。

冲突(真实的(

所以,让我们让它变得更加困难;首先,让我们先撤消分支main上的合并,将其重置为合并前的提交。手动指定提交ID,或者使用HEAD^。(如果你不确定这指的是哪一个提交,只需git show HEAD^并确认它是"删除功能C"。

$ git show HEAD^
$ git reset --hard HEAD^
$ git lx
* 64d82c9 (HEAD -> main) Remove feature C
| * c8038f5 (feature) Add feature E
|/  
* fb88cb0 Initial ABCD commit

在main上创建一个更困难的更改:

$ echo 'FE' >> test.txt
$ git commit -am "Add FE"

现在,终于发生了合并冲突:

$ git merge feature
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.
$ cat test.txt
A
B
D
<<<<<<< HEAD
FE
=======
E
>>>>>>> feature

Git停止任何为你思考的尝试。有用的命令git status建议您如何继续:您可以选择

  • "修复冲突并运行CCD_ 6";或
  • 后退一步;使用CCD_ 7中止合并">

分辨率

步骤";修复冲突";只需在文本编辑器中打开test.txt,然后想知道test.txt最终的样子。只有您才能决定上述更改的正确解决方案。只需删除所有冲突标记并保持文件整洁即可。例如,我为test.txt选择了以下解析状态:

A
B
D
E
FE (separate from E!)

之所以引入解释性文本,是因为FE旁边的E可能会引起混淆。这是为了强调您可以执行任何您认为合适的编辑;解决冲突";。

完成后,查看git status中的说明:现在您已经修改了test.txt;CCD_ 11以标记分辨率";出现,所以我们这样做(然后git状态建议我们使用commit来结束合并(:

$ git add test.txt
$ git commit -m "Complicated merge of 'feature' into main"
$ git lx
*   d12730f (HEAD -> main) Complicated merge of 'feature' into main
|  
| * c8038f5 (feature) Add feature E
* | 864eea7 Add FE
* | 64d82c9 Remove feature C
|/  
* fb88cb0 Initial ABCD commit

最新更新