我们的工作流程是这样的。我们有一个名为dev
的分支,我可以在origin/dev
到达。当我们进行更改时,我们创建一个分支关闭开发:
git checkout -b FixForBug origin/dev
现在我有一个名为FixForBug
的分支,它正在跟踪(我认为这是正确的词)origin/dev
。因此,如果我做一个git pull
,它将带来来自origin/dev
的新更改,这很棒。现在,当我完成修复后,我推送到一个名为同样的事情的远程分支。
首先,我从origin/dev
下拉任何更改并进行重新定位:
git pull --rebase
然后我将更改推送到同名的远程分支:
git push origin FixForBug
现在,远程服务器上有一个分支,我可以创建一个拉取请求来批准该更改并合并回开发分支。我自己没有曾经推送任何东西到origin/dev
。我猜这是一个非常常见的工作流程。
我第一次执行git push
时,它工作正常并创建了远程分支。但是,如果我推送第二时间(假设在代码审查期间,有人指出了一个问题),我会得到以下错误:
错误:未能将一些裁判推送到 https://github.mydomain.info/Product/product.git
提示:更新被拒绝,因为您当前分支的尖端在其远程对应的尖端后面。在再次推送之前集成远程更改(例如提示:'git拉…')。
有关详细信息,请参阅“git ush--help”中的“关于快进的注释”。
但是,如果我执行git status
,它会说我领先于origin/dev
by 1提交(这是有道理的),如果我按照提示运行git pull
,它会说一切都是最新的。我认为这是因为我正在推送到与上游分支不同的分支。我可以通过运行来解决此问题:
git push -f origin FixForBug
在这种情况下,它会将更改推送到远程分支,说(强制更新)和出现在远程分支上是好的。
我的问题:
为什么在这种情况下需要-f
?通常当你迫使什么的时候,这是因为你做错了什么,或者至少违反了标准做法。我这样做可以吗,还是会在远程分支中搞砸一些东西,或者给最终必须将我的东西合并到开发中的人带来麻烦?