我们的工作流程就是这样。我们有一个叫dev我可以到达的分公司origin/dev。当我们进行更改时,我们会在 dev 之外创建一个分支:
dev
origin/dev
git checkout -b FixForBug origin/dev
现在我有一个名为FixForBug跟踪的分支(我认为这是正确的词)origin/dev。因此,如果我这样做,git pull它将带来origin/dev很棒的新变化。现在,当我完成修复后,我推送到一个名为相同事物的远程分支。
FixForBug
git pull
首先,我从中拉出任何更改origin/dev并进行变基:
git pull --rebase
然后我将更改推送到同名的远程分支:
git push origin FixForBug
现在,远程服务器上有一个分支,我可以创建一个拉取请求,以便批准该更改并将其合并回 dev 分支。我 从不 强迫自己做任何事情origin/dev。我猜这是很常见的工作流程。
我第一次做 agit push时,它工作正常并创建了远程分支。但是,如果我 再次 推送(假设在代码审查期间,有人指出了一个问题),我会收到以下错误:
git push
错误:未能将一些引用推送到“https://github.mydomain.info/Product/product.git” 提示:更新被拒绝,因为您当前分支的尖端位于其远程对应部分之后。在再次推送之前集成远程更改(例如提示:’git pull …’)。 有关详细信息,请参阅“git push –help”中的“关于快进的说明”。
但是,如果我这样做,git status它说我领先origin/dev1 次提交(这是有道理的),如果我按照提示运行git pull,它说一切都是最新的。我 认为 这是因为我正在推动与上游分支不同的分支。我可以通过运行来解决这个问题:
git status
git push -f origin FixForBug
在这种情况下,它会将更改推送到远程分支,说 (强制更新) 并且远程分支上的一切 似乎 都很好。
我的问题:
为什么-f在这种情况下需要?通常当你 强迫 某事时,那是因为你做错了事,或者至少违反了标准做法。我可以这样做吗,或者它会在远程分支中弄乱一些东西,或者给最终必须将我的东西合并到开发中的人造成麻烦?
-f
由于-f 变 基,实际上是必需的。每当您进行变基时,您都需要进行强制推送,因为远程分支无法快速转发到您的提交。您 总是 希望确保在推送之前进行拉取,但如果您不想为此强制推送到 master 或 dev,您可以创建一个新分支来推送,然后合并或制作 PR .