为什么GitHub分支显示了很多"联合"承诺?

时间:2018-03-27 17:14:47

标签: git

这经常发生在我身上:

  • 使用一些初始提交在本地创建分支my-branch,添加到PR
  • 推送到GitHub
  • 等待几天让分支机构获得审核
  • 在本地制作并提交一些更改
  • 运行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上的分支,看看它现在显示了来自master的数以万计的额外提交,它们显示为"联合提交"我和我团队中的其他人。

这很烦人,因为这意味着分支上的差异也显示了所有额外的提交,而不仅仅是我所做的更改。

我做错了什么?我怎样才能防止将来发生这种情况?

在尝试推动之前,我可能会有一个答案可以改变吗?但如果是这样,那么GitHub消息就会引起混淆,因为它推荐git pull

2 个答案:

答案 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合并到你的功能分支中,它可能发生在远程分支上,尽管如果是这样的话就更难进入你的最终状态。

要避免这种情况:

  1. 在做更多本地工作之前,请务必git pull
  2. 在完成当地工作后务必确保git push,特别是如果您知道其他人将在分支机构工作。
  3. 不要重新合并提交(例如从master合并到您的功能分支)。