我的项目中有两个分支: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
中对其进行了一些更改。现在,当我合并时,有两种可能性:
git将合并file1的两个版本,并使用&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;
或者git会感觉file1从dev-core / projectX / file1重命名为core / projectX / file1并且让我保留我的文件并将丢弃来自R1分支文件的更改如果我是正确的那么第二场景是我的情况,这可能会导致我丢失imp代码Plz纠正我,如果我错了。
我测试了在git中重命名文件夹,我的理解是错误的。 :( git检测文件夹重命名,并将巧妙地合并。现在我必须弄清楚我的问题。
Ahaaa我发现了自己的错误,git很聪明,我试图超越;)我所要做的就是git merge
我做git mv dev-core core
增加了很多复杂性并造成了很多麻烦:P
答案 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-core
和core
,则表示git无法合并某些文件,并且它们仅保留在旧位置。只需比较两个文件
dev-core/projectX/file1
&amp; core/projectX/file1
使用一些比较工具并解决问题。删除旧文件,你就完成了:)