3 回答
TA贡献1829条经验 获得超7个赞
而不是使用-f或--force开发人员应该使用
--force-with-lease
为什么?因为它检查远程分支的更改,这绝对是个好主意。让我们想象一下,詹姆斯和丽莎正在研究同一个功能分支,丽莎已经推动了提交。詹姆斯现在重新调整他的当地分支,并在试图推动时被拒绝。当然,詹姆斯认为这是因为改变并使用--force并且会改写所有Lisa的变化。如果詹姆斯曾经使用过--force-with-lease,那么他会收到一个警告,告知其他人已做过提交。我不明白为什么有人会在推销一个rebase之后使用--force而不是--force-with-lease。
TA贡献1827条经验 获得超4个赞
对此的一个解决方案是执行msysGit的rebasing合并脚本所做的事情- 在rebase之后,在旧的head中feature合并-s ours。你最终得到了提交图:
A--B--C------F--G (master)
\ \
\ D'--E' (feature)
\ /
\ --
\ /
D--E (old-feature)
...而你的推动feature将是一个快速前进。
换句话说,你可以这样做:
git checkout feature
git branch old-feature
git rebase master
git merge -s ours old-feature
git push origin feature
(未经测试,但我认为这是正确的......)
TA贡献1825条经验 获得超4个赞
问题是git push假设远程分支可以快速转发到本地分支,即本地和远程分支之间的所有区别在本地有一些新的提交,如下所示:
Z--X--R <- origin/some-branch (can be fast-forwarded to Y commit)
\
T--Y <- some-branch
执行git rebase提交时,D和E将应用于新基础,并创建新的提交。这意味着在rebase之后你会有类似的东西:
A--B--C------F--G--D'--E' <- feature-branch
\
D--E <- origin/feature-branch
在那种情况下,远程分支无法快速转发到本地。虽然,理论上本地分支可以合并到远程(显然你在这种情况下你不需要它),但是git push只执行快进合并它会引发错误。
什么--force选项只是忽略远程分支的状态并将其设置为您正在推送它的提交。所以git push --force origin feature-branch简单地origin/feature-branch用本地覆盖feature-branch。
在我看来,master只要您是唯一一个在该分支上工作的人,就可以将功能分支和强制推送回远程存储库。
- 3 回答
- 0 关注
- 1205 浏览
添加回答
举报