[英]Missing the + parameter in git push after git rebase
我想在推送完成后将提交压缩到git中。 因此,我发现了一个问题: 如何在推送后将其压缩到git中? 。
我按照公认的回答说:
git rebase -i origin/master~4 master
但是我忘记了在将其推到github时在主节点之前添加+
参数。 这意味着我使用git push origin master
而不是git push origin +master
。
我想知道这有多重要,以及如何撤消它,所以我可以使用正确的命令。
------------------- 编辑1 ----------------------------
我使用emacs magit作为我的git客户端,因此具体地说,我使用magit-push-other origin master
。
Magit的日志在下面,红色矩形圈出了我要压缩的两个提交。 在我压扁了两个提交之后,magit告诉我有一个未推送的提交和两个未从上游合并的提交。 然后,我使用magit-pull-from-upstream
和magit-push-other origin master
完成这些更改。 然后提交日志就是图片绘制的内容。
如果git push origin master
在这种情况下不起作用,似乎更像是一个magit问题。
正如@rkta所指出的,这个问题是在您挤压后进行拉动时产生的:您会注意到,您的Git日志现在具有三个提交来编辑语法错误:原始的两个加上已压缩的一次,合并到c6f979b
。 该合并提交是由git pull
创建的。
此时,我建议您不要尝试解决此问题,因为您的协作者可能已经获取了您的更改,如果您再次尝试修复此历史记录,他们将不得不做一些工作来修复其沙箱。 总的来说,从您提交承诺的那一刻起,我想说即使您不喜欢它也应该保留历史-强制推送只会为他人带来更多工作。
话虽如此,这是您仍然可以修复它的方式,以及首先如何修复它的方法:
git pull
git rebase -i a8ba675
# mark the grammatical error commits to be squashed -
# this will still work even though you already merged
git fetch
# use git log --all to make sure no one committed anything since the pull above
git push origin +master
# pray no one comes to yell at you
+
参数怎么办 +
表示强制推动。 如果您在需要时忘记了它,则会收到错误消息。 解决的方法是再次使用+
。
但是在使用类似技术之前,您应该真正了解有关在git中重写历史记录的更多信息。
经验法则:不要在推送后重写历史记录-这意味着您可能永远不需要强制推送。
问题是,您在壁球之后做了拉力。
为什么git会显示从上游推送了一个提交而没有合并两个提交呢?
您创建了两个提交A和B,并将它们推到原始位置。 现在,当您在本地压缩这些提交时,它们都将被删除,并被新的提交C代替。
然后git在原始记录中看到两个不在源中的提交(A和B)-当然,您只是删除了它们。 如果执行git pull
,则刚刚删除的提交和新创建的提交将合并在一起。
解决方案1:
一旦推送历史,请勿重写历史!
解决方案2:
挤压提交后不要拉,只需强行推动即可。 真的不要对共享分支执行此操作!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.