我是新来的,所以请随意把我当作新手。
我们的工作流程就是这样。我们有一个分支叫做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中的人制造麻烦?
-f
实际上是必需的,因为有了rebase。每当您执行rebase时,都需要执行强制推送,因为远程分支不能快速转发到您的提交。你总是想在推之前确定你做了一个pull,但是如果你不想在这件事上强制push to master或dev,你可以创建一个新的分支push to,然后合并或创建一个PR要确保本地分支FixForBug不在远程分支FixForBug之前,请在推之前拉合并更改。
如果您想避免使用
-f
,那么可以使用而不是
非rebase将从
origin/dev
获取更改,并将其合并到FixForBug
分支中。那么,你就可以跑了不使用
-f
。相关问题 更多 >
编程相关推荐