正在进行中。无法提交。如何进行或停止(abort)?

rebase in progress. Cannot commit. How to proceed or stop (abort)?

当我运行:

git status

我看到了这个:

rebase in progress; onto 9c168a5
You are currently rebasing branch 'master' on '9c168a5'.
(all conflicts fixed: run "git rebase --continue")
nothing to commit, working directory clean

当我这样做时:

ls `git rev-parse --git-dir` | grep rebase || echo no rebase

我看到了:rebase-apply

我不能承诺原创。

git branch

显示:

* (no branch, rebasing master)
  develop
  master

我卡住了。我不知道该怎么办? rebase真的需要这么长时间吗? git rebase --continue 什么都不做。我没有任何处于 git 状态的东西。我只是在等待变基。我能做什么?

更新: 这是以下命令的输出:git rebase --continue

Applying: no message
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

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

git 添加 .什么都没有。

Rebase 不会在后台发生。 "rebase in progress" 意味着你开始了一个变基,并且变基因为冲突而中断了。你必须恢复变基 (git rebase --continue) 或中止它 (git rebase --abort).

正如来自 git rebase --continue 的错误消息所暗示的那样,您要求 git 应用一个导致空补丁的补丁。最有可能的是,这意味着补丁已经应用并且您想使用 git rebase --skip.

删除它

您告诉您的存储库变基。看起来您正在进行提交(由 SHA 9c168a5 标识)然后执行了 git rebase mastergit pull --rebase master.

您正在将分支主机变基到该提交上。您可以通过 git rebase --abort 结束变基。这将回到您开始变基之前的状态。

我最近陷入了这种状态。在变基期间解决冲突后,我提交了我的更改,而不是 运行 git rebase --continue。这会产生与您在 运行 您的 git statusgit rebase --continue 命令时看到的相同消息。我通过 运行 git rebase --abort 解决了这个问题,然后重新 运行 变基。也可以跳过 rebase,但我不确定我会处于哪种状态。

$ git rebase --continue
Applying: <commit message>
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

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

$ git status
rebase in progress; onto 4df0775
You are currently rebasing branch '<local-branch-name>' on '4df0775'.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working directory clean

我在 git checkout

上将 git 设置为 autorebase
# in my ~/.gitconfig file
[branch]
    autosetupmerge = always
    autosetuprebase = always

否则,当你在分支之间切换时它会自动合并,我认为这是默认的最糟糕的选择。

但是,这有一个副作用,当我切换到一个分支然后 git cherry-pick <commit-id> 每次发生冲突时,我都会进入这种 奇怪的 状态.

我实际上必须中止 rebase,但首先我修复冲突,git add /path/to/file 文件(在这种情况下解决冲突的另一种非常奇怪的方法?!),然后执行git commit -i /path/to/file。现在我可以中止 rebase:

git checkout <other-branch>
git cherry-pick <commit-id>
...edit-conflict(s)...
git add path/to/file
git commit -i path/to/file
git rebase --abort
git commit .
git push --force origin <other-branch>

第二个git commit .好像是中止的。如果我发现我应该尽快中止 rebase,我会修正我的答案。

如果您跳过其他提交并且两个分支都不平滑(两个都缺少另一个提交),则需要--force推送。

IDE

A​​BORT / SKIP / CONTINUE 的另一个选项

VCS > Git > Abort Rebasing

  • 第一步:继续git rebase --continue

  • 第 2 步: 解决冲突,然后 git add .

  • 返回第 1 步,现在如果显示 no changes .. 则 运行 git rebase --skip 并返回步骤1

  • 如果你只想退出rebase 运行 git rebase --abort

  • 完成所有更改后运行 git commit -m "rebase complete",您就完成了。


Note: If you don't know what's going on and just want to go back to where the repo was, then just do:

git rebase --abort

Read about rebase: git-rebase doc

我卡在了'rebase status',我得到了

On branch master
Your branch is up to date with 'origin/master'.

You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working tree clean

但是 运行 git rebase --skip 产生了 error: could not read '.git/rebase-apply/head-name': No such file or directory

运行 rm -fr ".git/rebase-apply" 有帮助。

注意:当然,只有在您不关心变基或者您不再需要以前的变基时才这样做。

我的是 BitBucket 弹出的错误。 运行 git am --skip 已修复。

如果 git rebase --abort 不起作用,你仍然得到

error: could not read '.git/rebase-apply/head-name': No such file or directory

类型:

git rebase --quit

我遇到了同样的问题,在我的情况下,当我尝试变基时我遇到了冲突,一旦我解决了所有冲突并尝试添加提交消息但它在我的客户端编辑器中显示此错误(VS 代码)

要解决这个问题,我们需要执行此命令 git commit -C HEAD@{1}

  • git commit -C HEAD@{1} 它将指向你在做变基之前的提交

有时在 VS 代码中它仍然显示正在进行 rebase,要解决这个问题你需要触发这个命令 rm -rf .git/REBASE_HEAD

  • rm -rf .git/REBASE_HEAD 它将从您的本地
  • 中删除“REBASE_HEAD”