我一直在研究远程git仓库的本地副本。 我在我的本地副本上创建了一个分支,我们称之为'my_branch'。 我已经在my_branch上做了几次。
我最近把'my_branch'推到了遥控器上。但是我不知道有人在远程主机上添加了一个版本。所以,我把它拿到了当地的主人那里。
所以...长话短说,我的本地回购看起来像这样(我正在尝试使用图解惯例here)。
--C0--------------C7-- (local master)
\
--C1-C2-C3-- (local my_branch)
\
--C4-C5-C6-- (local sandbox_branch)
我希望它看起来像:
--C0--------------C7-- (local master)
\
--C1'-C2'-C3'-- (local my_branch)
\
--C4'-C5'-C6'-- (local sandbox_branch)
我尝试将my_branch改为ONTO本地主人但是我收到了这条错误消息(我正在使用一个名为GitX的git可视化工具):
Rebase Failed!
There was an error rebasing HEAD with branch 'master'.
command: git rebase refs/heads/master
It seems that I cannot create a rebase-apply directory, and
I wonder if you are in the middle of patch application or another
rebase. If that is not the case, please
rm -fr /my_project_directory/.git/rebase-apply
and run me again. I am stopping in case you still have something
valuable there.
我做错了什么?我该怎么处理?如果我在命令行中执行此操作,那么让我进入上图中的状态的命令是什么?
更新1
顺便说一句,我不是在应用程序补丁或其他变种的中间......至少不是故意的。 在我发现遥控器在我推动后更新后,我进行了取景。这有什么可以让GitX认为我正处于应用程序补丁或其他rebase的中间吗?我还将图表更新为更准确。 my_branch有一个分支。我没有将它包含在原始问题中b / c我认为这不重要。我包括以防万一...
更新2
仅供参考...'本地'和'远程'的主树看起来像我绘制的图表,除了它没有sandbox_branch。
答案 0 :(得分:29)
git rebase找到了一个.git/rebase-apply
目录,因此假设您可能处于rebase的中间位置。如果在之前的rebase期间发生冲突并且rebase没有完成,就会发生这种情况;即你没有运行git rebase --abort
,git rebase --skip
或git rebase --continue
中的一个(解决冲突后的最后一个)。
无论如何,如果你认为你根本没有运行git rebase,那么你是如何结束这种状态并不重要的。只需rm -fr /my_project_directory/.git/rebase-apply
作为帮助建议,您现在应该可以进行变基。
但是等等。既然您说您已将分支发布到远程存储库,则不应尝试将master重新绑定到远程存储库。事实上,如果您的遥控器设置为拒绝非快进提交(这似乎是一般建议的最佳做法),您甚至无法将rebase更改推送到遥控器。一般来说,在将提交发布到遥控器之后尝试修改提交(这是git rebase
所做的)是一种不好的做法。
答案 1 :(得分:0)
转到您的项目目录。在.git下找到 rebase-apply 文件夹,然后删除该文件夹。
注意:默认情况下,.git文件夹将被隐藏。