更新被拒绝,因为当前分支的提示已过期

2024-04-25 06:57:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新来的,所以请随意把我当作新手。

我们的工作流程就是这样。我们有一个分支叫做dev,我可以在origin/dev找到它。当我们进行更改时,我们将创建一个分支dev:

git checkout -b FixForBug origin/dev

现在我有一个分支叫做FixForBug,它正在跟踪(我认为这是正确的词)origin/dev。因此,如果我做一个git pull,它将从origin/dev带来新的变化,这很好。现在,当我完成修复后,我会推到一个叫做相同东西的远程分支。

首先,我从origin/dev中删除任何更改并执行一个rebase:

git pull --rebase

然后将更改推送到同名的远程分支:

git push origin FixForBug

现在,在远程服务器上有一个分支,我可以创建一个pull请求,以批准该更改并将其合并回dev分支。我从不把任何东西推给自己。我猜这是相当常见的工作流程。

我第一次执行git push时,它工作正常并创建远程分支。但是,如果我按一秒(比如在代码检查期间,有人指出了一个问题),就会得到以下错误:

error: failed to push some refs to 'https://github.limeade.info/Limeade/product.git' 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. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

但是,如果我做一个git status,它会说我比origin/dev提前一次提交(这是有意义的),如果我按照提示运行git pull,它会说一切都是最新的。我认为这是因为我推到了一个不同于上游分支的分支。我可以通过运行以下命令来解决此问题:

git push -f origin FixForBug

在这种情况下,它会将更改推送到远程分支,说(强制更新)并且所有都在远程分支上显示为良好。

我的问题:

为什么在这个场景中需要-f?通常当你强迫别人做某事时,那是因为你做错了什么,或者至少违反了标准做法。我可以这样做吗,或者它会在远程分支中弄乱一些东西,或者给最终必须将我的东西合并到dev中的人制造麻烦?


Tags: thetodevgit远程remote分支rebase
3条回答

-f实际上是必需的,因为有了rebase。每当您执行rebase时,都需要执行强制推送,因为远程分支不能快速转发到您的提交。你总是想在推之前确定你做了一个pull,但是如果你不想在这件事上强制push to master或dev,你可以创建一个新的分支push to,然后合并或创建一个PR

要确保本地分支FixForBug不在远程分支FixForBug之前,请在推之前拉合并更改。

git pull origin FixForBug
git push origin FixForBug

如果您想避免使用-f,那么可以使用

git pull

而不是

git pull --rebase

非rebase将从origin/dev获取更改,并将其合并到FixForBug分支中。那么,你就可以跑了

git push origin FixForBug

不使用-f

相关问题 更多 >