问题
我在将父存储库放入fork并正确解决冲突时遇到了问题。看起来,如果一个文件在fork中被重命名,并且同时被父文件和fork修改,git只会将其视为deleted by us
。
当我使用git pull /path/to/parent master
和git merge upstream/master
(with upstream configured)时,就会发生这种情况。
如何使用git使系统提示我解决重命名文件上的冲突,而不是让git假定该文件为deleted by us
?
设置
这是一个演示我遇到的问题的设置。这可以在本地完成,也可以在在线管理系统中完成(我在Azure DevOps /VSTS中遇到了这种情况)。
我已经用这两个代码库在GitHub中复制了下面的大部分步骤:
父级- https://github.com/Daniel-Khodabakhsh/TestForkPull
您可以克隆fork并执行git pull https://github.com/Daniel-Khodabakhsh/TestForkPull.git master
来查看问题。
手动步骤:
/path/to/fork
并切换到此路径,在存储库路径中创建一个小项目,其中包含名为A.txt
、B.txt
和C.txt
的任意文本文件。git mv
,但这并不重要,因为它是如何工作的。A.txt → X.txt
B.txt → Y.txt
C.txt → Z.txt
git diff --name-status HEAD~1
并注意到'R'
指示检测到的重命名来识别重命名。$ git diff --name-status HEAD~1
R100 A.txt X.txt
R100 B.txt Y.txt
R100 C.txt Z.txt
在父存储库中,对文件Z.txt
.和
A.txt
和Y.txt
文件的内容进行修改到目前为止,您在两个repos中都有以下文件:
A.txt → X.txt - Modified in parent
B.txt → Y.txt - Modified in both
C.txt → Z.txt - Modified in fork
通过从分支路径运行git pull /path/to/parent master
,
$ git pull /path/to/parent/ master
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
From D:/path/to/parent
* branch master -> FETCH_HEAD
CONFLICT (modify/delete): B.txt deleted in HEAD and modified in ba146eba53bd7d51c9977238d9d62b56f7a984f7. Version ba146eba53bd7d51c9977238d9d62b56f7a984f7 of B.txt left in tree.
Automatic merge failed; fix conflicts and then commit the result.
$ git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Changes to be committed:
modified: X.txt
Unmerged paths:
(use "git add/rm <file>..." as appropriate to mark resolution)
deleted by us: B.txt
在这里,X.txt
只正确地显示了来自父存储库的修改,Z.txt
正确地没有受到来自分支存储库的更改的影响,但是Y.txt
(B.txt
)并没有正确地显示为冲突,而是仅显示为deleted by us
。
https://stackoverflow.com/questions/56348599
复制相似问题