Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git-如何在从父repo提取时处理本地重命名文件中的更改 问题:_Git_Git Merge_Git Pull_Git Merge Conflict - Fatal编程技术网

Git-如何在从父repo提取时处理本地重命名文件中的更改 问题:

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中体验到这一点) 我在

我在将父存储库拉入分支和正确解决冲突时遇到问题。 如果一个文件在fork中被重命名,并且同时被父文件和fork修改,git只会将其视为被我们删除

当我使用
git-pull/path/to/parent-master
git-merge-upstream/master
时会发生这种情况

我如何使用git来解决重命名文件上的冲突,而不是让git假设文件已被我们删除

安装程序 下面是一个演示我遇到的问题的设置。这可以在本地或在线管理系统中完成(我在Azure DevOps/VSTS中体验到这一点)

我在GitHub中复制了以下两个回购协议的大部分步骤:

  • 父母-
  • 叉子
您可以克隆fork并执行git pullhttps://github.com/Daniel-Khodabakhsh/TestForkPull.git 掌握以查看问题

手动步骤:
  • 在repo path
    /path/to/parent
    中,使用名为
    a.txt
    B.txt
    C.txt
    的任意文本文件创建一个小项目

  • 通过将此回购复制到
    /path/to/fork
    并切换到此路径来创建此回购的fork

  • 在这个新的fork repo中,按照以下方式重命名文件并提交。我是用操作系统而不是使用git mv来实现的,但这并不重要,因为git是如何工作的

  • 通过运行
    git diff--name status HEAD~1
    并注意到指示检测到重命名的
    'R'
    ,验证git是否识别该重命名
  • 在父repo中,修改文件
    A.txt
    B.txt
    的内容

  • 在fork repo中,修改文件
    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
    
  • 通过从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末尾显示了一些额外的字符(a
    crlf
    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