繁体   English   中英

git rebase后缺少​​git push中的+参数

[英]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-upstreammagit-push-other origin master完成这些更改。 然后提交日志就是图片绘制的内容。

magit日志

如果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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM