为了实现git nirvana,我花了一天时间学习如何在我目前合并的情况下利用rebase.
当我通过我认为是git 101流程(我在下面拼写出来)时,我必须push --force
将我的更改推回原点.
我不是唯一的一个-我知道这是覆盖的地面(见图1,2,3,4,5),我理解的技术原因,为什么力是必要的.我的问题是这样的---有歌声底垫的赞美很多(多)发表的博客以及它如何改变他们的生活(见1,2,3,4,列出了几个),但他们没有提到push --force
是的一部分他们的流量.然而,几乎现有的stackoverflow问题的每一个答案都说"是的,如果你要改变,你必须使用push --force
".
鉴于rebase倡导者的数量和宗教信仰,我不得不相信使用'push -force'并不是rebase流的固有部分,如果经常不得不强迫他们推动,他们就会做错事.
push --force
是一件坏事.
所以这是我的流程. 在没有武力的情况下,我能以何种方式获得相同的结果?
简单的例子
两个分支:
我有一些补丁提交和一些提交下一个版本.
我想将这些补丁合并到我的主人中,以便他们在下一个版本中不会丢失.启蒙前我简单地说:
git checkout master
git merge v1.0
Run Code Online (Sandbox Code Playgroud)
但现在我正在努力
git checkout master
git rebase v1.0
Run Code Online (Sandbox Code Playgroud)
所以现在我在这里:
的时间:
git push
Run Code Online (Sandbox Code Playgroud)
没有骰子.
Tod*_*obs 39
重新绑定是一个很好的工具,但是当您使用它来创建主题分支到主服务器的快进合并时,它最有效.例如,您可以针对master重新添加add-new-widget分支:
git checkout add-new-widget
git rebase -i master
Run Code Online (Sandbox Code Playgroud)
在执行分支快速合并到主服务器之前.例如:
git checkout master
git merge --ff-only add-new-widget
Run Code Online (Sandbox Code Playgroud)
这样做的好处是您的历史记录不会有很多复杂的合并提交或合并冲突,因为所有更改都将在合并之前重新定位到master的tip.第二个好处是你已经重新定位,但你不必使用,git push --force
因为你没有破坏主分支的历史.
这当然不是rebase的唯一用例,也不是唯一的工作流程,但它是我见过的更明智的用途之一.因人而异.
Fab*_*aux 22
@CodeGnome是对的.你不应该在v1.0分支上修改master而在master上修改v1.0分支,这将使一切变得不同.
git checkout -b integrate_patches v1.0
git rebase master
git checkout master
git merge integrate_patches
Run Code Online (Sandbox Code Playgroud)
创建一个指向v1.0的新分支,将该新分支移到master之上,然后将新版本的V1.0补丁集成到master分支.你会得到类似的东西:
o [master] [integrate_patches] Another patch on v1.0
o A patch on v1.0
o Another change for the next major release
o Working on the next major release
| o [v1.0] Another path on v1.0
| o A patch on v1.0
| /
o Time for the release
Run Code Online (Sandbox Code Playgroud)
这种使用rebase的方法是官方git文档推荐的.
我认为你是对的git push --force
:如果你犯了一个错误而推了一些你不想要的东西,你应该只使用它.
Dan*_*man 16
你必须力推,如果你重订,并且您已经发布的更改,对不对?
我使用了一大堆rebase,但是我要么发布一个私有的东西,其中强制推送无关紧要(例如:我自己的克隆在GitHub上,作为拉取请求的一部分),或者我在第一次推送之前进行rebase.
这是您使用rebase的工作流程的核心,但不要强迫推送:在它们准备好之前不要发布内容,在推送之后不要重新发布.
我认为,这种重基础然后强制推送模式有一个很好的用例,它不是错误推入的结果:您可以从多个位置(计算机)自己进行功能分支。我经常这样做,因为有时我在台式机上的办公室里工作,有时又在笔记本电脑上的家庭/客户现场工作。我偶尔需要调整基准以跟上主分支和/或使合并更整洁,但是当我离开一台机器以在另一台机器上工作时(在我刚刚拉动的地方),我还需要强制推动。只要我是该分支机构中唯一的一名,就可以像魅力一样工作。
归档时间: |
|
查看次数: |
25353 次 |
最近记录: |