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

时间:2010-02-22 21:41:52

标签: git

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

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

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

git merge-file 就是 - 如果我是对的 - 期待这两个文件和一个共同的祖先。但是如何给后者呢?我怎么能说“使用来自$ commit的$ path”或类似的东西?

示例:

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

我现在想要一个名为'bfile'的文件,同时进行两项更改:

Changed first line in master Second line in mybranch

由于

4 个答案:

答案 0 :(得分:13)

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

CONFLICT (delete/modify): ERD.pdf deleted in HEAD and ... 

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

希望有所帮助。

答案 1 :(得分:8)

我也有情景

  

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

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

  

未合并的路径:
  (根据需要使用“git add / rm ...”标记分辨率)

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

答案 2 :(得分:2)

<强>更新 好的,git的递归合并算法本身就可以做到这一点。我只是用太小的文件来测试它,所以相对的相似性在重命名检测的触发器之下。

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


当然我可以做点什么

git show HEAD^:afile > afile_ancestor
kdiff3 -m afile_ancestor afile bfile

P.S。:对不起上面的格式错误。我没有打开JavaScript,所以我看不到预览。

答案 3 :(得分:1)

git status将在这里为您提供帮助。

如果要将文件添加到当前分支,请执行git add <file-name> 如果要从当前分支中删除文件,请执行git rm <file-name>