4

我有一个主分支和一个功能分支。两者都包含 Bar.cs 文件。但是,当我尝试将功能合并到 master 时,它报告文件 Bar.cs 已在功能分支上被删除。但是 Bar.cs 从未在功能上被删除,正如我所说,两个文件都存在于两个分支上。

master 上的 Bar.cs 文件的 git 日志返回以下内容:

commit daaf6bd6c8d2a38b839fae44234ceef2a0c9e188
Author: xxxx
Date:   Fri Jun 28 10:17:18 2013 +0000

    Renamed Foo.cs to Bar.cs

文件 Bar.cs on feature 的 git 日志返回以下内容:

commit 93dea9f7a2b9474c169bf8a49c5a721572a9d369
Author: xxxx
Date:   Fri Jul 5 16:14:46 2013 +0000

    Another change

commit de9fbe3ae13ccdac8a540c653af10abb1a2f1006
Author: xxxx
Date:   Tue Jul 2 16:03:43 2013 +0000

    Renamed Foo.cs to Bar.cs

如您所见,在功能中,我在 7 月 2 日合并了来自 master 的更改,然后在 6 月 28 日对文件进行了另一项更改。

当我尝试合并时,git 说:

CONFLICT (rename/delete): Bar.cs deleted in feature and renamed in HEAD. Version HEAD of Bar.cs left in tree.

知道发生了什么吗?

4

2 回答 2

3

git-svn在使用该工具从 SVN 存储库同步的两个分支之间合并时遇到了同样的问题。

一些文件在分支上被重命名并在分支master更新feature,但 git 检测到这些文件在侧面被删除:feature

CONFLICT (rename/delete): Classes/A.m deleted in feature and renamed in HEAD. Version HEAD of Classes/A.m left in tree.

解决方案是将合并策略更改为resolve而不是默认策略recursive

git merge -s resolve feature
于 2013-10-04T09:34:48.513 回答
0

由于有问题的提交似乎是完全相同的事情,您可以尝试以交互方式重新设置featureontop master

git checkout feature
git rebase -i master

将弹出一个编辑器,让您选择要选择的提交。删除带有 commit 的行de9fbe。然后,这将重新应用所有提交,除了feature.

之后,可以使用合并

git checkout master
git merge --no-ff feature
于 2013-08-02T12:19:12.617 回答