我们是一个由5人组成的开发团队。我们有一个主分支,每当我们处理新事物时,我们就会创建一个新的分支。当我们完成更改时,我们将分支推送到GitLab并执行合并/拉取请求,以便它再次与主服务器合并。
我的机器上有一个分支,我已经工作了大约一个星期。在那个星期,主人有变化,所以我在我的分支上执行此命令:
git rebase master
完成后,我这样做是为了推动我的新分支:
git push origin some-branch
当我这样做时,我收到了这个错误:
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
我做它的建议,我做git pull origin some-branch
。现在,我更改的文件已使用===HEAD>
文本进行了修改。所以我解决了这个问题,并重新开始工作。
然后,我再次尝试git push origin some-branch
并出现完全相同的错误。
为了使其更清晰,某些分支上的git status
返回:
# On branch some-branch
# Your branch and some-branch have diverged,
# and have 3 and 3 different commits each, respectively.
我该如何解决这个问题,或者我做错了什么?
答案 0 :(得分:4)
你应该强制推动你的分支,而不是合并更改。也就是说,在你重组之后使用git push -f
。
当你执行rebase时,你告诉Git将master的历史记录重放到你的分支上,然后,你的分支的提交需要在重播的工作之后落实到位。
此更改了该分支的历史记录,这解释了您在git status
中看到分歧消息的原因,但这完全是故意的。但是,在将其与远程分支合并时,您极大地会混淆您的历史记录;它现在包含永远不应存在的合并提交。
下次使用强制推送,但是某些您已经重新启动的工作会通过您的测试,无论是冒烟测试,单元/集成测试,还是其他。
答案 1 :(得分:-2)
您可以尝试在进行拉动之前为本地更改创建一个存储...
$ git commit -m "your commit"
$ git stash
$ git pull
$ git stash apply
$ git push