Git变基,修复冲突,然后拒绝推送

Fen*_*Huo 11 git rebase git-merge-conflict

当我恢复基准时然后解决了一些冲突,就会收到以下消息:

提示:更新被拒绝,因为当前分支的尖端在后面


我们有2个分支:

  • master 是我们的基地
  • feature/fix-input-height (合并到母版中的新功能)

我正在准备feature/fix-input-height改编师父以本地解决冲突

git checkout master
git pull origin master

git checkout feature/fix-input-height
git pull origin feature/fix-input-height

git rebase master
Run Code Online (Sandbox Code Playgroud)
  • 发生冲突
  • 我解决了
  • 然后尝试推送新功能分支
git push origin feature/fix-input-height
Run Code Online (Sandbox Code Playgroud)

并再次以拒绝的错误消息结束:

提示:更新被拒绝,因为当前分支的尖端在后面


Stackoverflow上的每个人都建议:

git push origin -f feature/fix-input-height
Run Code Online (Sandbox Code Playgroud)

但是强行推动感觉不对

tor*_*rek 17

通过复制提交来使工作变基。首先,例如:

...--o--o--o   <-- master
      \
       A--B--C   <-- feature/fix-input-height (HEAD)
Run Code Online (Sandbox Code Playgroud)

并最终得到:

             A'-B'-C'  <-- feature/fix-input-height
            /
...--o--o--o   <-- master
      \
       A--B--C   [previous feature/fix-input-height, now abandoned]
Run Code Online (Sandbox Code Playgroud)

但是另一个存储库(不是您的存储库,而是您要求Git进行存储的存储库)git push仍然具有原始提交。您不再需要那些提交。您有新的和改进的,但是他们不知道。 他们所知道的就是您要他们扔掉三个完美的提交。

所以他们说不,我不会扔掉那些。除非您使用强制命令而不是礼貌的请求,否则至少不要这样。

这就是为什么您需要--force或(尽管人​​们很少使用)更好的原因--force-with-lease。无论哪种方式告诉他们:是的,我的意思是您应该放弃提交。 两者之间的区别--force只是说:丢掉您的提交!改用这个! 使用--force-with-lease说:我认为你的feature/fix-input-height名字犯了C。如果是这样:丢弃那些提交!改用这个! 如果有人添加了commit D,而您没有提交,因此没有包含在您的基准库中,它将失败。