合并两个git分支与不同的文件夹名称

时间:2014-04-22 07:17:41

标签: git git-merge

我的项目中有两个分支:R1和OPE

两个分支的原始文件夹结构是:

dev-core/projectX/java-files

现在我们开始研究OPE分支,同时R1分支中的根文件夹从dev-core重命名为core。 现在R1分支的文件夹结构是:

core/projectX/java-files

和OPE分支的文件夹结构是:

dev-core/projectX/java-files

我必须在我的OPE分支中合并R1分支的更改。 现在,如果我做一个简单的git merge R1,git会在R1分支中创建一个dev-core文件夹并复制其中的所有文件。

我尝试使用git mv在OPE中重命名文件夹,然后尝试执行git merge R1,它几​​乎为所有文件提供了以下消息:

CONFLICT (rename/delete): core/projectX/path/to/java/file deleted in R1
  and renamed in HEAD. Version HEAD of core/projectX/path/to/java/file
  left in tree.

现在,当我检查文件并查找冲突时(通过搜索符号<<<),我无法找到任何冲突。任何人都可以向我解释这里发生了什么,我该如何解决这个问题?

注意:我在合并时使用了--no-commit选项。

更多信息

这就是我合并的方式:

git checkout -b OPE origin/OPE
git checkout -b R1 origin/R1
git checkout OPE
git mv dev-core core
git merge R1

以下是我对发生的事情的理解: 让我们说如果有一个文件dev-core/projectX/file1。我在OPE branch中对此文件进行了一些更改并提交了它。现在有人在core/projectX/file1 R1 branch中对其进行了一些更改。现在,当我合并时,有两种可能性:

  1. git将合并file1的两个版本,并使用&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;

  2. 或者git会感觉file1从dev-core / projectX / file1重命名为core / projectX / file1并且让我保留我的文件并将丢弃来自R1分支文件的更改如果我是正确的那么第二场景是我的情况,这可能会导致我丢失imp代码Plz纠正我,如果我错了。

  3. 我测试了在git中重命名文件夹,我的理解是错误的。 :( git检测文件夹重命名,并将巧妙地合并。现在我必须弄清楚我的问题。

    Ahaaa我发现了自己的错误,git很聪明,我试图超越;)我所要做的就是git merge我做git mv dev-core core增加了很多复杂性并造成了很多麻烦:P

2 个答案:

答案 0 :(得分:0)

你不会看到带有冲突标记的文件,冲突说

CONFLICT (rename/delete): core/projectX/path/to/java/file deleted in R1
    and renamed in HEAD.

这意味着存在冲突,因为文件已在当前重命名 分支,虽然它在R1中被完全删除。

你必须告诉git如何解决这个冲突(即你想重命名 该文件,还是删除它?)。 Git留下了重命名的文件版本 你的工作副本:

  

版本core/projectX/path/to/java/file的HEAD留在树中。

如果你git status,你会看到类似的内容:

$ git status
On branch test
Your branch and 'origin/test' have diverged,
and have 1 and 1 different commit each, respectively.
  (use "git pull" to merge the remote branch into yours)

You have unmerged paths.
  (fix conflicts and run "git commit")

Unmerged paths:
  (use "git add <file>..." to mark resolution)

        added by them:      core/projectX/path/to/java/file

您可以选择通过执行git add <file>来保留文件的重命名版本, 或者您可以使用git rm <file>将其删除。然后提交更改。那是 在这种情况下如何解决合并冲突。

答案 1 :(得分:0)

我的问题的解决方案是不使用git mv dev-core core重命名文件夹只是合并。 Git会照顾好一切。

如果您在工作区中看到两个文件夹dev-corecore,则表示git无法合并某些文件,并且它们仅保留在旧位置。只需比较两个文件 dev-core/projectX/file1&amp; core/projectX/file1使用一些比较工具并解决问题。删除旧文件,你就完成了:)