这经常发生在我身上:
my-branch
,添加到PR git push origin my-branch
,并收到以下错误消息:到github.com:myorg/myrepo.git! [拒绝] my-branch - > my-branch(非快进)错误:无法推送一些引用 ' git@github.com:MYORG / myrepo.git'提示:更新被拒绝,因为 你当前分支的提示背后提示:它的远程对应物。 之前整合远程更改(例如提示:' git pull ...') 再推一次。
git pull origin my-branch
,并收到以下消息(没有错误):首先,倒带头重播你的作品......
git push origin my-branch
,这次没有错误这很烦人,因为这意味着分支上的差异也显示了所有额外的提交,而不仅仅是我所做的更改。
我做错了什么?我怎样才能防止将来发生这种情况?
在尝试推动之前,我可能会有一个答案可以改变吗?但如果是这样,那么GitHub消息就会引起混淆,因为它推荐git pull
。
答案 0 :(得分:1)
你肯定必须使用git pull
,但它可能是"拉合并"或者"拉动反叛"。目前你做前者而你想要后者。命令为git pull --rebase
。
进行"拉动反转"默认情况下全局配置:
git config --global branch.autosetuprebase always
重新配置现有存储库和分支:
git config branch.$NAME.rebase true
例如:
git config branch.master.rebase true
答案 1 :(得分:1)
您收到的错误消息表明远程分支上有额外的提交,而本地没有。既然你已经向当地人承诺,他们现在也不同步了。
关键是某人已在您的远程分支上提交。这不仅对冲突很重要,对于你的功能的完整性也很重要,所以要注意这一点非常重要。
但是,在您的情况下,似乎在您最近的更改中,您已将master合并到您的分支中。然后,您已经在远程分支的顶部有效地完成了分支的rebase。默认情况下,Git将展平这些提交,将它们直接应用于您的分支,而不是重新创建合并提交(请参阅--preserve-merges)。这就是为什么你可以看到所有那些现在在你的分支中重放的提交作为Github中的联合提交。
如果你没有将master合并到你的功能分支中,它可能发生在远程分支上,尽管如果是这样的话就更难进入你的最终状态。
要避免这种情况:
git pull
。git push
,特别是如果您知道其他人将在分支机构工作。