git子模块冲突在rebase期间导致提交丢失。

3

我遇到了以下这个反复出现的场景:

  1. 我提交了一些文件的更改,以及对子模块的更新。
  2. 其他人提交并推送了相同的子模块更新。
  3. git pull --rebase时,我遇到了冲突。
  4. 我通过添加最新版本的子模块来解决冲突。
  5. 问题是:现在,我只有一个提交了子模块更新而没有其他文件更改的提交,没有第1步中所做的提交。

我总是通过中止变基并使用pull --no-rebase,或者从reflog中cherry-pick变基前的提交来解决此问题。

肯定有更好的方法。

是否有良好的解决常见错误情况的方法?


请在 Stack Overflow 上避免使用粗俗和冒犯性语言。 - user456814
你能详细说明一下在 git pull --rebase 之后运行的命令吗? - Evgeny
在执行了 git pull --rebase 命令之后,除了子模块更新之外的所有更改都已经丢失了,除非我使用 git rebase --abort 命令。我可以运行 git add <submodule path>; git rebase --continue 命令,但这样我会有一个仅包含子模块更新而不包含其他更改的变基提交。 - yonix
1
尝试升级您的git。无法重现此问题。有一个提交,其中两个文件都更改了,并且子模块更改了,而子模块存在冲突,rebase表现正确。 - Evgeny
感谢@Evgeny-升级git解决了它。 - yonix
1个回答

3
可能是旧版本的Git存在Bug。在尝试修复软件中发生的奇怪问题时,升级到较新的稳定版本始终是一个好主意。

谢谢。我的git安装来自Xcode,所以升级到Xcode 5就解决了问题(我太懒了...) :) - yonix
3
使用brew。强烈推荐。甚至可以使用boxen。 - Evgeny
遇到了同样的问题(git 1.7.12.4(Apple Git-37)),升级到1.9.0解决了问题。 - klogd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接