67

我正在将我的主人变基到舞台分支

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

吉特说:

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".

我说“别叫我‘笨蛋’,照我说的做!”

我们现在处于对峙状态。谁是对的,我该如何解决?

4

6 回答 6

65

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

不能保证提交没有其他不冲突的文件,应该合并。git rebase --skip会丢失这些文件。你不想要那个。

于 2011-04-01T17:20:47.597 回答
3

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

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

跑吧git rebase --skip

于 2011-04-01T16:53:41.700 回答
2

当提交添加了与现有文件冲突的二进制文件时,我遇到了这个问题。

我得到了它:

  • 删除现有文件,
  • 对不同文件中的注释进行单个字符更改,以及
  • "git add" ing 那个不相关的变化。

吉特又高兴了。:)

于 2013-05-30T20:20:07.947 回答
0

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

考虑到如果您正在挑选/移植/反向移植影响已重构或重命名的文件的更改,也可能会发生此错误。

例如,假设您调用support/1.0了如下所示的分支:

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

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

    com.somewhere.package/
      一种/
        MyClass.java
        ANewClass.java
      乙/
        MyOtherClass.java

现在,假设您有一个来自 1.5 版的功能分支,您尝试将其反向移植到基于support/1.0. MyClass.java在该提交中,对 1.5 版( 、、ANewClass.javaMyOtherClass.java)的所有三个文件进行了更改。

如果您尝试使用变基或纯樱桃挑选来帮助进行反向移植,则可能会发生以下两种情况之一:

  • 如果文件被重命名为正在移植的更改的一部分,或者在正在移植的更改的直接父提交中,GIT 的内置重命名检测可能会发现这些文件是具有原始名称的文件的后代,并简单地应用更改到原始文件。

  • 如果文件在 1.5 版的历史上被重命名得足够远(在 1.0 版发布之后),GIT 会告诉您这些文件已被删除,release/1.0因为它不知道 1.0 中的哪些文件对应于 1.5 的更改。

ANewClass.java几乎肯定会触发有关已被删除的错误,除非它被添加到正在向后移植的更改之一中。

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

于 2017-04-19T14:19:14.387 回答
0

作为我的问题:

当我这样做时,我git add .的所有更改都消失了。我需要更改任何文档(只是添加一点更改,例如添加评论)并且git add .git rebase --continue我有用。这是 git 的一个已知错误

于 2020-02-10T10:27:02.887 回答
0

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

之后,您可以重新启动并且不会收到此错误。

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

于 2021-01-25T04:30:14.890 回答