我在功能分支上,我刚刚完成了成功的重新设置(团队>重新设置>主),所以我的分支离主设置的距离不会太远。
现在在Eclipse git历史中,我可以看到分支的5个提交位于master之上,这是预期的结果。
但是项目名称旁边有一些指示符,表示[上箭头] 7 [下箭头] 5,当我尝试将分支推到远程分支时,它说:“拒绝非快速-前进”(我正在这个远程存储库上独自工作,并且我只有一个git客户端,即Eclipse egit)。
有人可以告诉我在改基后如何“不快进”吗?从现在开始我该怎么办?再次“变基”? “拉” ? “合并”?
答案 0 :(得分:2)
它不是快进,因为从原先的位置(即远程仍在的位置)开始无法继续前进,无法到达更新的分支。 Git提交是不可变的,因此当您重新设置基准时,会进行一组全新的提交,其中包含与原始提交相同的更改集:
master & origin/master feature
| |
v v
M -- N -- O -- P -- A' -- B' -- C'
\
A -- B -- C
^
|
origin/feature
此图应该非常清楚地说明为什么您无法通过快进从origin/feature
到feature
。
您可以通过两种方式解决此问题。如果已设置权限,则可以强制执行。这是处理这种情况的最简单的标准方法。自负,你做
(来自EGit on Eclipse: How to git push --force?)
另一种选择是将master合并到您的分支中,而不是进行变基。这不是很干净的历史记录,但是它将用单个合并提交替换您复制的提交,从而解决了快速转发问题。该图将如下所示:
master & origin/master
|
v
M -- N -- O -- P --
\ \
A -- B -- C -- D
^ ^
| |
| feature
origin/feature
如您所见,feature
将处于可以从origin/feature
快速转发 的合并提交。
一个更复杂的方法是在服务器上运行,将feature
重置为master
,然后再次从客户端推送。一般来说,这不是一个好主意,但可以保证推送会快速进行:
# On the server:
git checkout feature
git reset --hard master