由于文件移动导致的Git合并冲突

5

我迄今为止并没有涉及过太多Git。现在,我遇到了以下问题。 当我做了一些本地修改和提交后,我的同事在一个新分支中对文件和文件夹进行了重构。然后,我添加了一个远程跟踪分支(反映他的更改),并尝试将我的修改合并到其中。当然,它会失败,因为文件移动到另一个位置。我该怎么继续下去? 通过'git status'命令可以看到以下内容:

# On branch develop
# You have unmerged paths.
#   (fix conflicts and run "git commit")
#
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#   deleted by us:      src/de/mpicbg/tds/knime/hcstools/prefs/DoubleFieldEditor.java
#   deleted by us:      src/de/mpicbg/tds/knime/hcstools/prefs/HCSToolsPreferencePage.java
#   deleted by us:      src/de/mpicbg/tds/knime/heatmap/HeatMapModel.java
#   deleted by us:      src/de/mpicbg/tds/knime/heatmap/PlateViewer.java
#   deleted by us:      src/de/mpicbg/tds/knime/heatmap/color/LinearGradientTools.java
#   deleted by us:      src/de/mpicbg/tds/knime/heatmap/dialog/PlateAttributeDialog.java
#   deleted by us:      src/de/mpicbg/tds/knime/heatmap/menu/TrellisMenu.java
#   deleted by us:      src/de/mpicbg/tds/knime/heatmap/menu/ViewMenu.java
#   deleted by us:      src/de/mpicbg/tds/knime/heatmap/menu/WellAttributeComboBox.java
#   deleted by us:      src/de/mpicbg/tds/knime/heatmap/renderer/HeatTrellis.java
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   bin/
#   src/de/mpicbg/tds/knime/heatmap/HeatMapModel.ucls
#   src/de/mpicbg/tds/knime/heatmap/diagram.ucls
no changes added to commit (use "git add" and/or "git commit -a")

我现在不知道该怎么办...


如果问题更清晰明确,那么建议解决方案会更有帮助。你实际上遇到了什么情况? - Breen ho
1个回答

6
如果您想要保留更改内容,但在新文件位置上使用 mergetool(因此必须选择删除文件,从而删除您的更改,或者保留文件,但它们不在正确的目录中),这种情况下使用 mergetool 将无法令人满意。
在此情况下,在冲突状态下,我会将冲突文件(位于旧目录中)移动到新目录中,git add 新文件,git rm 旧文件(存在冲突)并提交。
以下是该过程的跟踪(3个文件“file1”,“file2”和“file3”已经移动到“files”文件夹中,并在另一个分支中进行了更新,先合并执行移动操作的分支,然后再合并更新文件内容的分支,出现冲突)。
ghislain@debian: /tmp/git-test (master)
> git merge --no-ff add-file-content 
冲突(修改/删除):file3在HEAD中被删除,在add-file-content中被修改。文件树中留下了file3的add-file-content版本。
冲突(修改/删除):file2在HEAD中被删除,在add-file-content中被修改。文件树中留下了file2的add-file-content版本。
冲突(修改/删除):file1在HEAD中被删除,在add-file-content中被修改。文件树中留下了file1的add-file-content版本。
自动合并失败;解决冲突,然后提交结果。
ghislain@debian: /tmp/git-test (master *+|MERGING)
> git status
在分支 master
您有未合并的路径。
  (解决冲突并运行“git commit”)
未合并的路径: (使用适当的“git add/rm ...”标记解决)
deleted by us: file1 deleted by us: file2 deleted by us: file3
没有提交更改(使用“git add”和/或“git commit -a”) ghislain@debian: /tmp/git-test (master *+|MERGING) > mv file1 file2 file3 files ghislain@debian: /tmp/git-test (master *+|MERGING) > git status 在分支 master 您有未合并的路径。 (解决冲突并运行“git commit”)
未合并的路径: (使用适当的“git add/rm ...”标记解决)
deleted by us: file1 deleted by us: file2 deleted by us: file3
未暂存的更改: (使用“git add ...”更新要提交的内容) (使用“git checkout -- ...”放弃工作目录中的更改)
modified: files/file1 modified: files/file2 modified: files/file3
没有提交更改(使用“git add”和/或“git commit -a”) ghislain@debian: /tmp/git-test (master *+|MERGING) > git add files ghislain@debian: /tmp/git-test (master *+|MERGING) > git status 在分支 master 您有未合并的路径。 (解决冲突并运行“git commit”)
要提交的变更: modified: files/file1 modified: files/file2 modified: files/file3
未合并的路径: (使用适当的“git add/rm ...”标记解决)
deleted by us: file1 deleted by us: file2 deleted by us: file3
ghislain@debian: /tmp/git-test (master *+|MERGING) > git rm file1 file2 file3 file1:需要合并 file2:需要合并 file3:需要合并 rm 'file1' rm 'file2' rm 'file3' ghislain@debian: /tmp/git-test (master +|MERGING) > git status 在分支 master 所有冲突已解决,但您仍在合并中。 (使用“git commit”来结束合并)
要提交的变更: modified: files/file1 modified: files/file2 modified: files/file3
ghislain@debian: /tmp/git-test (master +|MERGING) > git commit [master 4e478c6] 合并分支'add-file-content' ghislain@debian: /tmp/git-test (master) >

非常感谢您的示例。通过尝试多种建议,我不知何故成功地解决了我的问题(虽然我不确定是如何做到的...)。您的方法对我来说是一种非常易于理解和干净的解决方案。我将接受您的答案。 - Antje Janosch
3
如果提交移动文件的同时也修改了它们,那么这个解决方案就不起作用了。它会丢弃这些更改。 - LuxDie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接