首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Git -从父库中提取时如何处理本地重命名文件中的更改

Git -从父库中提取时如何处理本地重命名文件中的更改
EN

Stack Overflow用户
提问于 2019-05-29 03:04:14
回答 1查看 381关注 0票数 3

问题

我在将父存储库放入fork并正确解决冲突时遇到了问题。看起来,如果一个文件在fork中被重命名,并且同时被父文件和fork修改,git只会将其视为deleted by us

当我使用git pull /path/to/parent mastergit 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来查看问题。

手动步骤:

  1. 通过将其复制到/path/to/fork并切换到此路径,在存储库路径中创建一个小项目,其中包含名为A.txtB.txtC.txt的任意文本文件。
  2. 在此新的分支存储库中,按以下方式重命名这些文件并提交。我使用的是操作系统,而不是git mv,但这并不重要,因为它是如何工作的。

A.txt → X.txt
B.txt → Y.txt
C.txt → Z.txt

  1. Verify git通过运行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.和

  1. 的内容进行修改,对A.txtY.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

  1. 将父存储库“拉”到分支中。您将获得以下输出:

$ 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

EN

回答 1

Stack Overflow用户

发布于 2019-05-29 18:23:41

注意: github会显示一些额外的字符(可能是crlf ?)在B.txt的末尾,在"modified B.txt“和"renamed Y.txt”中都消失了。这可能会增加检测git重命名的混乱。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56348599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档