【发布时间】:2017-07-15 04:04:10
【问题描述】:
这是我的提交历史:
* Merge commit (missing file a.c)
/|
||
*| Add new file a.c again <- branchB
||
|* Remove files a.c <- branchA
||
*| Remove files a.c
||
\|
|
* Add new file a.c
|
|
...
我有一个分支分支,我在其中添加了一个文件。然后,我分支到了branchB。由于某种原因(重构),该文件后来在 branchB 中被删除。我将这些更改反向移植到 branchA 中。但后来,我又在 branchB 中添加了文件。最后我将branchB合并到branchA中。
git checkout branchA
git merge branchB
在合并期间,没有提及文件 a.c.并且在branchA中合并后文件不存在。为什么 git 无法在 branchB 中看到文件 a.c 是在删除(在两个分支中)之后(相对于日期和时间)添加的,因此需要保留它?至少,我想看看冲突什么的……
感谢您的帮助!
【问题讨论】:
-
你可以发布你运行的 git 命令吗?
-
我编辑了我的帖子。只需使用 git checkout 然后 git merge。当然,我在两个分支中都有更多的提交,并且必须解决一些冲突。但没有与此文件相关的冲突。
-
它不应该查看日期,因为合并并不意味着更喜欢稍后的更改而不是更早的更改。
-
日期和时间与 Git 无关;重要的是提交。具体来说,三个 - 并且只有三个 - 提交很重要:合并基础,两个分支回到一起(这是你的底部
Add new file a.c提交),以及两个 分支提示 A 和 B。Git 将合并基础与 A 进行比较,以查看 A 组发生了哪些变化。 Git 将合并基础与 B 进行比较,以查看 B 组发生了什么变化。然后 Git 合并这两个更改,将合并后的更改应用到合并基础,并提交结果。 -
好的,所以 Git 发现合并基础和分支 B 之间的文件 a.c 没有变化。但是在合并基础和分支A 之间,它看到了一个删除。所以结果是文件 a.c 被删除了。在我的情况下,使用 git merge,即使在管理冲突之后,生成的项目也处于无效状态并且无法再编译/工作......从 git 的角度来看,我该怎么办?是否有我应该注意的 git merge 或合并参数的替代方法?