git-subtree拉动并发症

Dav*_*nts 19 git merge git-subtree

我们一直试图让git-subtree处理一个项目(使用git版本1.7.9.4)并且遇到了一些复杂问题.几个月前,其他人之前使用此命令添加了子树:

git subtree add --prefix=foo git@example.com:foo.git master
Run Code Online (Sandbox Code Playgroud)

现在已经有了实质性的变化foo,我们想要合并这些变化,最好将它们压缩.自导入文件以来,没有任何文件被修改过.

我已经尝试了三件事来尝试合并更改.

第一:

git subtree pull --squash -P foo git@example.com:foo.git master
Run Code Online (Sandbox Code Playgroud)

抛出异常: Can't squash-merge: 'foo' was never added.

第二:

git subtree pull -P foo git@example.com:foo.git master
Run Code Online (Sandbox Code Playgroud)

这有点工作(但有一些问题,但是存在拉入所有提交的问题,并且与已修改的文件有冲突.

最后,我尝试了这个:

git pull --squash -s subtree git@example.com:foo.git  master
Run Code Online (Sandbox Code Playgroud)

这给了我想要的结果,输出Automatic merge went well; stopped before committing as requested和所有文件显示为已修改(具有正确的内容).

理想情况下,我想继续使用第一个git-subtree版本并获得接近上一版本的输出.如果我们必须始终使用最后一个版本,我们会,但我有点困惑为什么最后一个不产生合并冲突,而中间版本.

任何帮助表示赞赏.

Jac*_*ask 11

我有同样的问题,在我的情况下,似乎是由于初始子树提交被合并压缩到主分支.

通过子树源我找到了这个:https://github.com/git/git/blob/master/contrib/subtree/git-subtree.sh#L224

它看起来像子树greits你的git日志,git-subtree-dir: foo但没有找到合适的提交.尝试git log --grep="git-subtree-dir: foo/*\$",如果有一些奇怪的提交,例如它是一个合并提交,这可能是问题.

除了烦人的合并冲突之外,只是拉着没有挤压为我工作.我在一个临时分支中这样做,然后我git merge --squash进入另一个分支,以避免更糟糕的历史.当然,它也可能已被改造.

  • 我遇到了同样的问题,结果是我在尝试拉取时在前缀选项中丢失了一个子文件夹。将此添加为注释,因为错误消息没有给出此错误的任何指示,并且故障排除将我带到这里。 (2认同)