我正在尝试使用'git merge'命令将两个分支上的代码组合在一起,但git在此过程中崩溃了。我需要找到一种合并这些分支的替代方法。
为了将合并输出增加到调试级别,我运行了:
$ export 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)
$ ulimit -c unlimited; ls -l core; git merge origin/PH-RELEASE-146.0; ls -l core ls: cannot access core: No such file or directory Merging HEAD with origin/PH-RELEASE-146.0 ... ... Merge with strategy recursive failed. -rw------- 1 user group 1589248 Jul 29 12:48 core
在这两种情况下,.git / index.lock都会保留,必须先手动删除,然后才能再次使用git命令:
$ git status 致命:无法创建'.git / index.lock':文件存在
我通过将提交ID与gitk树中的提交ID进行比较,手动完成了上面的合并。我似乎很清楚git正在寻找共同的祖先并将合并分解成碎片,递归地处理每个祖先。但我认为导致问题的是,在提交e0a5fa1和ce62bf1之间,一个名为“build”的子模块的“git-link”发生了变化:
显然存在冲突。但这是“部分”合并期间的冲突或其所谓的,而不是最后一次。并且git似乎根本不能很好地处理这个问题。
好的,所以可能存在一个错误 - 我将如何提交错误报告?
但我真正关心的是我无法合并这两个分支。有没有人知道在不使用'merge'命令的情况下将这些分支组合在一起的另一种方法?在整个合并过程中,我能否以某种方式完全忽略这个子模块?
Linux git版本1.6.0.4
Cygwin git版本1.6.1.2
答案 0 :(得分:1)
尝试在linux上升级git,1.6.3.3是最新的,如果这对于威廉的想法没有帮助。