Git rebase ——“继续”不起作用

我做了 git rebase master,修正了文件中报告的冲突,然后用 git add文件来解决冲突。然后我做了 git rebase --continue,得到了这个:

应用: 固定单元测试

没有变化-你忘记使用“ git”了吗 如果没有什么东西留给舞台,那么很有可能 Else 已经引入了相同的更改; 您可能希望跳过这一步 补丁。

解决此问题后,请运行“ git rebase —— keep” 如果您希望跳过此补丁程序,请运行“ git rebase —— Skip” 检查原始分支并停止 rebase,运行“ git rebase” 中止。

你知道我错过了什么吗? 我是不是应该重新... 跳过?

26819 次浏览

这很可能意味着更改已经重新设置了基础。

深呼吸,你没疯!这是一个已知的 bug,其中 OSX (如果您确实正在使用它)正在干扰 git,它是详细的 给你(不是我编写的)。

短篇小说(也就是解决方案)是:

git config --global core.trustctime false

如果你使用的是 Mac OS X,那么首先你应该禁用 revisiond,因为它可能会在 rebase 中间扰乱你工作树中的文件,导致不可预测的和破碎的行为:

git config --global core.trustctime false

这个问题在 这篇文章中得到了解释,非常感谢 @ Nickfalk指出了这个问题。

至于您的重建基础,这种情况在实践中并不少见。 让我们试着思考一下正在发生的事情的步骤:

  • 当您将当前分支重新定位到另一个分支上时,git 将 HEAD 移动到另一个分支,并开始应用当前分支中的唯一提交。

  • 在重播其中一个提交时,您遇到了一个冲突。您已经解决了这个问题,但是因此没有要提交的更改,在这个提交中也没有要重播的内容。

实际上,这意味着您拒绝了正在重播的当前提交中的更改。因此,如果您不需要这个提交中的任何内容,跳过它是正常的。所以 git rebase --skip在这里说得通。

我在项目中遇到过类似的问题,通过将 保存合并选项放到 rebase 命令中解决了这个问题。在我的项目中,这个问题是由合并提交引起的,合并提交是一个“空提交”。使用 git rebase --preserve-merges,它接受合并提交,并在不破坏提交树的情况下继续合并。

以上的建议都不管用。我发现我有这个问题是因为我对主分支进行了硬重置,而我的特性分支有一些遗留的主提交(不要问我怎么做——不知道: ()。

我将所做的更改复制到一个临时目录,删除我的特性分支,将它们复制回来,然后从头开始重新启动。丑陋但有效。如果您试图在特性分支中保留多个提交,则不建议这样做。不建议,除非你尝试 其他的一切

更新: 这个方法是有效的,但是在下面的评论中有人向我指出了一个更好的方法。

我尝试了所有的方法,但都不管用。如果您不是在一个 rebase 的中间,但是 git 一直在抱怨,那么尝试以下方法。这对我在 OSX 的工作。

rm -fr ".git/rebase-apply"

git add .将从这个状态中解除阻塞,但是如果您通过接受传入的更改解决了所有冲突,那么就没有 diff 可以添加,因此 git 认为就 rebase 而言冲突没有得到解决。

我采取了一种低调的方法,不依赖于使用神秘的 git 配置变化等的副作用:

  • 增加无害的内容(如 //在一行) ,每个文件在冲突(给予 git 的东西,以 add)
  • git add .
  • git rebase --continue
  • 删除无害的评论

都搞定了