为了达到git境界,我正在花一天的时间学习如何利用rebase来处理我目前使用merge处理的情况。
当按照我认为是git 101的流程(如下所述)操作时,我必须在将更改推回原始版本时使用push --force
命令。
我不是唯一一个这样想的人 - 我知道这已经是老生常谈了(参见1, 2, 3, 4, 5),而且我也理解为什么需要使用强制操作(why a force is necessary)。我的问题是 --- 有很多(很多)博客文章赞扬rebase并称它改变了他们的生活(参见1, 2, 3, 4等),但其中没有一个提到push --force
是他们工作流程的一部分。然而,几乎所有现有的stackoverflow问题的答案都说:“是的,如果你要rebase,就得使用push --force
”。
鉴于rebase支持者的数量和虔诚程度,我不得不相信使用“push --force”不是rebase流程的固有部分,如果一个人经常需要强制推送,那么他们可能做错了什么。
push --force
是一件坏事。
所以这是我的流程。 如何在不使用force的情况下实现相同的结果?
简单的例子
两个分支:
- v1.0 - 一个发布分支,只包含补丁
- master - 下一个主要版本的所有内容。
我有几个补丁提交和几个用于下一个版本的提交。
git checkout master
git merge v1.0
但现在我正在尝试
git checkout master
git rebase v1.0
所以现在我在这里:
时间到了:
git push
没有结果。
[master] [branch-b] {origin/master} {origin/branch-b} b1
,而在没有强制推送的情况下使用merge --ff-only
,它显示[master] [branch2] {origin/master} {origin/HEAD} b1
。请注意origin/branch-b
与origin/HEAD
之间的差异。 - tomyhomie