从 master 变基时推送分支

Pushing branch when rebasing from master

我们是一个5人的开发团队。我们有一个 master 分支,每当我们处理新事物时,我们就创建一个新分支。完成更改后,我们将分支推送到 GitLab 并执行 merge/pull 请求,以便它再次与主分支合并。

我的机器上有一个分支,我已经工作了大约一个星期。在那一周,master 发生了变化,所以我在我的分支上执行这个命令:

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 在某些分支 returns:

# On branch some-branch
# Your branch and some-branch have diverged,
# and have 3 and 3 different commits each, respectively.

我该如何解决这个问题,或者我做错了什么?

您可以尝试在进行拉取之前为本地更改创建一个存储...

$ git commit -m "your commit" 
$ git stash
$ git pull
$ git stash apply
$ git push

您应该强制推送您的分支,而不是合并更改。也就是说,在变基后使用 git push -f

当你执行 rebase 时,你是在告诉 Git 将 master 的历史重播到你的分支上,随后,你的分支的提交需要在重播工作之后就位。

改变了该分支的历史记录,这解释了为什么您会在 git status 中看到分歧消息,但这完全是故意的。但是,在将它与您的远程分支合并时,您 极大地 混淆了您的历史;它现在包含不应该存在的合并提交。

下次改用强制推动,但要确定你重新建立基础的工作通过了你的测试,无论是冒烟测试,unit/integration测试,或其他方式。