<p>我是新来的,所以请随意把我当作新手。</p>
<p>我们的工作流程就是这样。我们有一个分支叫做<code>dev</code>,我可以在<code>origin/dev</code>找到它。当我们进行更改时,我们将创建一个分支dev:</p>
<blockquote>
<p>git checkout -b FixForBug origin/dev</p>
</blockquote>
<p>现在我有一个分支叫做<code>FixForBug</code>,它正在跟踪(我认为这是正确的词)<code>origin/dev</code>。因此,如果我做一个<code>git pull</code>,它将从<code>origin/dev</code>带来新的变化,这很好。现在,当我完成修复后,我会推到一个叫做相同东西的远程分支。</p>
<p>首先,我从<code>origin/dev</code>中删除任何更改并执行一个rebase:</p>
<blockquote>
<p>git pull --rebase</p>
</blockquote>
<p>然后将更改推送到同名的远程分支:</p>
<blockquote>
<p>git push origin FixForBug</p>
</blockquote>
<p>现在,在远程服务器上有一个分支,我可以创建一个pull请求,以批准该更改并将其合并回dev分支。我从不把任何东西推给自己。我猜这是相当常见的工作流程。</p>
<p>我第一次执行<code>git push</code>时,它工作正常并创建远程分支。但是,如果我按一秒(比如在代码检查期间,有人指出了一个问题),就会得到以下错误:</p>
<blockquote>
<p>error: failed to push some refs to
'<a href="https://github.limeade.info/Limeade/product.git" rel="noreferrer">https://github.limeade.info/Limeade/product.git</a>' 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.</p>
</blockquote>
<p>但是,如果我做一个<code>git status</code>,它会说我比<code>origin/dev</code>提前一次提交(这是有意义的),如果我按照提示运行<code>git pull</code>,它会说一切都是最新的。我认为这是因为我推到了一个不同于上游分支的分支。我可以通过运行以下命令来解决此问题:</p>
<p><code>git push -f origin FixForBug</code></p>
<p>在这种情况下,它会将更改推送到远程分支,说<em>(强制更新)</em>并且所有<em>都在远程分支上显示为良好。</p>
<p><strong>我的问题:</strong></p>
<p>为什么在这个场景中需要<code>-f</code>?通常当你强迫别人做某事时,那是因为你做错了什么,或者至少违反了标准做法。我可以这样做吗,或者它会在远程分支中弄乱一些东西,或者给最终必须将我的东西合并到dev中的人制造麻烦?</p>