Git-如何在从父repo提取时处理本地重命名文件中的更改 问题:
我在将父存储库拉入分支和正确解决冲突时遇到问题。 如果一个文件在fork中被重命名,并且同时被父文件和fork修改,git只会将其视为被我们删除 当我使用Git-如何在从父repo提取时处理本地重命名文件中的更改 问题:,git,git-merge,git-pull,git-merge-conflict,Git,Git Merge,Git Pull,Git Merge Conflict,我在将父存储库拉入分支和正确解决冲突时遇到问题。 如果一个文件在fork中被重命名,并且同时被父文件和fork修改,git只会将其视为被我们删除 当我使用git-pull/path/to/parent-master和git-merge-upstream/master时会发生这种情况 我如何使用git来解决重命名文件上的冲突,而不是让git假设文件已被我们删除 安装程序 下面是一个演示我遇到的问题的设置。这可以在本地或在线管理系统中完成(我在Azure DevOps/VSTS中体验到这一点) 我在
git-pull/path/to/parent-master
和git-merge-upstream/master
时会发生这种情况
我如何使用git来解决重命名文件上的冲突,而不是让git假设文件已被我们删除
安装程序
下面是一个演示我遇到的问题的设置。这可以在本地或在线管理系统中完成(我在Azure DevOps/VSTS中体验到这一点)
我在GitHub中复制了以下两个回购协议的大部分步骤:
- 父母-
- 叉子
/path/to/parent
中,使用名为a.txt
、B.txt
和C.txt
的任意文本文件创建一个小项目/path/to/fork
并切换到此路径来创建此回购的forkgit diff--name status HEAD~1
并注意到指示检测到重命名的'R'
,验证git是否识别该重命名A.txt
和B.txt
的内容Y.txt
和Z.txt
的内容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
,将父回购“拉”到fork中。您将获得以下输出:$git状态
论分行行长
您有未合并的路径。
(修复冲突并运行“git提交”)
(使用“git merge--abort”中止合并)
要提交的更改:
修改:X.txt
未合并路径:
(酌情使用“git add/rm…”标记分辨率)
已被我们删除:B.txt
此处X.txt
正确地仅显示来自父回购的修改,Z.txt
正确地不受来自fork回购的更改的影响,但是Y.txt
(B.txt
)没有正确地显示为冲突,而是显示为仅被我们删除
如果一个文件在fork中被重命名,并且被父级和fork都修改,那么git只会将其视为被我们删除
请注意,git不会跟踪文件重命名或移动。这意味着,当一个文件在分支上移动并在另一个分支上修改时,您将看到合并冲突
我如何使用git来解决重命名文件上的冲突,而不是让git假设文件已被我们删除
您必须在文件的移动版本中手动进行修改。注意:github在B.txt末尾显示了一些额外的字符(acrlf
maybe?),这些字符在“modified B.txt”和“重命名的Y.txt”中消失。这可能会增加在检测git重命名时的混乱
$ git diff --name-status HEAD~1
R100 A.txt X.txt
R100 B.txt Y.txt
R100 C.txt Z.txt
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
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