在git中解决"CONFLICT(删除/修改)"

mok*_*sin 31 git

在一个分支A中的一个分支中,更改文件并提交更改.现在在另一个分支B中编辑和重命名相同的文件.

将B合并到A git时,可以正确识别冲突(CONFLICT(删除/修改)),并且这两个文件都在工作目录中.

如果我知道想要在一个文件中同时进行更改,我该如何做到最好?

有一个git merge-file是 - 如果我是对的 - 期望这两个文件和一个共同的祖先.但是如何给后者呢?我怎么能说"使用$ commit from $ commit"或类似的东西?

例:

mkdir git-rename-repo
cd git-rename-repo
git init

echo "First line" > afile

git add .
git commit -m "First commit in master"
git checkout -b mybranch

echo "Second line in mybranch" >> afile
git mv afile bfile

git commit -a -m "change and rename in mybranch"
git checkout master

echo "Changed first line in master" > afile

git commit -a -m "changed afile"
git merge mybranch
Run Code Online (Sandbox Code Playgroud)

我现在想要一个名为'bfile'的文件,其中包含两个更改:

Changed first line in master Second line in mybranch

谢谢

wor*_*mer 15

就我而言,它是存储库中没有的已删除文件

CONFLICT (delete/modify): ERD.pdf deleted in HEAD and ... 
Run Code Online (Sandbox Code Playgroud)

我只需要这样做:git rm ERD.pdf

希望有所帮助.

  • 这假设您要接受已删除的文件,该文件在问题中显式_not true_. (2认同)

sha*_*988 9

我也有这个场景

**CONFLICT(修改/删除):***文件名在HEAD中删除,并在6efb2a94ba0601aa1ec5050ab222a0359ee8379a中修改.FileName版本6efb2a94ba0601aa1ec5050ab222a0359ee8379a留在树中.*

我也同样困惑并且达到了这个职位.但在打字时git status,所有的疑惑都消失了.git status,对冲突文件说明如下:

未合并的路径:(
使用"git add/rm ..."标记分辨率)

所以我刚刚做了git rm FileName,之后CONFLICT得到了解决.


mok*_*sin 3

更新 好吧,git 的递归合并算法本身就可以很好地完成这个任务。我只是使用太小的文件来测试它,因此相对相似性低于重命名检测的触发条件。

如果我用两小行更改文件的一行,则相对变化非常大。


当然我可以做类似的事情

git show HEAD^:afile > afile_ancestor
kdiff3 -m afile_ancestor afile bfile
Run Code Online (Sandbox Code Playgroud)

PS:对于上面的格式损坏表示抱歉。我没有打开 JavaScript,所以看不到预览。