删除/修改冲突后,Git rebase不会继续

时间:2011-04-01 16:49:21

标签: git version-control rebase git-rebase

我正处于我的主人对舞台分支的反对之中

git checkout stage
git rebase master

有时我删除了两个文件,然后根据GIT修改了两个文件。

warning: too many files, skipping inexact rename detection
CONFLICT (delete/modify): test-recommendation-result.php deleted in HEAD and modified in [Bug] Fix test recommender. Version [Bug] Fix test recommender of test-recommendation-result.php left in tree.
CONFLICT (delete/modify): test-recommendation.php deleted in HEAD and modified in [Bug] Fix test recommender. Version [Bug] Fix test recommender of test-recommendation.php left in tree.
Failed to merge in the changes.
Patch failed at 0015.

我想说“是的git,继续并删除这些文件”所以......

git rm test-recommendation-result.php
git rm test-recommendation.php
git rebase --continue

Git说:

Applying [Bug] Fix test recommender
No changes - did you forget to use 'git add', Stupid?

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".

我说“不要打电话给我”愚蠢“只是做我告诉你的事情!”

我们现在处于僵局。谁是对的,我该如何解决这个问题?

6 个答案:

答案 0 :(得分:46)

执行git add -A后跟git rebase --continue。这应该添加所有更改 - 包括删除文件然后继续。

无法保证提交没有其他文件没有冲突且应该合并。 git rebase --skip会丢失这些文件。你不希望这样。

希望这有帮助。

答案 1 :(得分:2)

当其他所有方法都失败时,请阅读该消息。

此补丁正在尝试修改两个文件,但它们已被删除;再删除它们什么也没做。

只需运行git rebase --skip

答案 2 :(得分:1)

当提交添加了与现有文件冲突的二进制文件时,我点击了这个。

我得到了它:

  • 删除现有文件
  • 将单个字符更改为其他文件中的注释,
  • “git add”这种无关紧要的变化。

Git又开心了。 :)

答案 3 :(得分:0)

没有一个神奇的命令序列可以始终运行来解决这种情况。如果有,GIT的开发人员只会执行该操作而不会打扰用户。

如果您正在挑选影响重新分解或重命名的文件的更改,那么也会发生此错误。

例如,假设您有一个名为support/1.0的分支,如下所示:


    com.somewhere.package-a/
      MyClass.java
      MyOtherClass.java

现在,假设在版本1.0和1.5之间,这被重构了。所以现在release/1.5看起来像这样:


    com.somewhere.package/
      a/
        MyClass.java
        ANewClass.java
      b/
        MyOtherClass.java

现在,让我们假设你有一个1.5版的功能分支,你试图根据support/1.0反向移植到功能分支。在该提交中,版本1.5(MyClass.javaANewClass.javaMyOtherClass.java)中的所有三个文件都发生了更改。

如果您尝试使用rebase或普通樱桃选择来帮助后端端口,可能会发生以下两种情况之一:

  • 如果文件被重命名为正在移植的更改的一部分, 或者直接的父母提交的变更之一 移植后,GIT的内置重命名检测可以捕获这些 文件是具有原始名称的文件的后代,简单地说 将更改应用于原始文件。

  • 如果文件在历史记录中已经重新命名 发布1.5(发布1.0发布后),GIT会告诉你的 文件已在release/1.0中删除,因为它没有 知道1.0中的哪些文件对应于1.5的变化。

ANewClass.java几乎肯定会触发有关被删除的错误,除非在后端移植的其中一个更改中添加了该错误。

因此,如果您盲目地遵循一组命令来解决这种情况,代码可能会丢失,这就是为什么GIT会提示您进行手动指导。

答案 4 :(得分:0)

我的问题:

当我做git add .时,所有更改都消失了。我需要更改任何文档(仅需添加少许更改,例如添加评论),并比git add .git rebase --continue有用。这是git

的已知错误

答案 5 :(得分:0)

如果你做了像我这样的事情,那是因为文件应该被忽略,而在某些时候它没有 - 所以它最终进入了源代码管理,从文件系统中删除文件,然后中止变基。< /p>

之后您可以重新启动并且不会出现此错误。

这不是一个理想的解决方案,但不幸的是,一旦发生这种情况,我没有找到任何其他可接受的补救措施。