我正在尝试将两个分支上的代码与“git merge”命令结合起来,但 git 在此过程中崩溃了。我需要找到一种替代方法来合并这些分支。
为了将合并输出增加到调试级别,我运行了:
$ 出口 GIT_MERGE_VERBOSITY=5
我目前在目标分支。git-status 显示一切干净清晰。当我合并分支时,这就是我所看到的(我已将签入注释替换为 %%%%%% 并将文件名替换为 #######,因为它们可能对业务敏感)。
$ git merge origin/PH-RELEASE-146.0
Merging HEAD with origin/PH-RELEASE-146.0
Merging:
8399d82 %%%%%%
4f9dcfe %%%%%%
found 2 common ancestor(s):
e0a5fa1 %%%%%%
ce62bf1 %%%%%%
Merging:
e0a5fa1 %%%%%%
ce62bf1 %%%%%%
found 1 common ancestor(s):
af34a07 %%%%%%
Skipped ######## (merged same as existing)
Removed ########
Removed ########
...
Removed ########
Auto-merged build
CONFLICT (submodule): Merge conflict in build - needs b3efae4855bc5eb83aa3167ce6c309a4503c3286
There are unmerged index entries:
1 build
2 build
3 build
Merge with strategy recursive failed.
事实证明,此时 git-merge 已经崩溃了。我怎么知道这个?- 在 Cygwin 下运行 git 时:
$ git merge origin/PH-RELEASE-146.0
11 [main] git 4352 _cygtls::handle_exceptions: Error while dumping state (probably corrupted stack)
Segmentation fault (core dumped)
- 在 Linux 下使用 'ulimit -c unlimited' 运行 git 时:
$ ulimit -c 无限;ls -l 核心;git 合并原点/PH-RELEASE-146.0;ls -l 核心 ls:无法访问核心:没有这样的文件或目录 将 HEAD 与 origin/PH-RELEASE-146.0 合并 ... ... 与策略递归合并失败。 -rw------- 1 个用户组 1589248 Jul 29 12:48 core
在这两种情况下, .git/index.lock 仍然存在,并且必须在任何 git 命令再次起作用之前手动删除:
$ git status fatal: 无法创建 '.git/index.lock': 文件存在
我通过将提交 ID 与 gitk 树中的提交 ID 进行比较,手动完成了上述合并。我似乎很清楚 git 正在寻找共同的祖先并将合并分解成碎片,递归地处理每个祖先。但我认为导致问题的是“git-link”到名为“build”的子模块在提交 e0a5fa1 和 ce62bf1 之间发生了变化:
- 在 e0a5fa1 中,子模块构建是 8dc84b6
- 在 ce62bf1 中,子模块构建是 b3efae4
所以很明显有冲突。但这是“部分”合并或任何所谓的冲突期间的冲突,而不是最终的冲突。而 git 似乎根本不能很好地处理这个问题。
好的,所以可能有一个错误 - 我将如何提交错误报告?
但我在这里真正关心的是我无法合并这两个分支。有谁知道不使用“合并”命令将这些分支组合在一起的另一种方法?我可以让'git-merge'在整个合并过程中以某种方式完全忽略这个子模块吗?
Linux git 版本 1.6.0.4
Cygwin git 版本 1.6.1.2