gitrebase--onto的多种⽤法
我不是Git专家,所以我经常在Git中学习会改变我对该⼯具看法的东西。 当显⽰git rebase -i ,我停⽌了对提交的思考。 当我发现git reflog ,我对重新部署变得更加⾃信。 但是我认为我被教过的最重要的命令之⼀是git rebase --onto 。
恕我直⾔,该⽂件在选择结果⽅⾯仍有改进的余地。 如果拍摄树的图像,它基本上会将树的⼀部分连根拔起,然后将其重新种植到其他位置。
让我们⽤以下树为例:
o---o---o---o master
\
\---o---o branch1
\
\---o branch2
假设我们要将branch2从branch1移植到master:
o---o---o---o master
\ \
\ \---o' branch2
\
\---o---o branch1
这是⼀个很好的⽤例! 在分⽀branch2 ,命令为git rebase --onto master branch1 。 这⼤约意味着将所有内容从branch2开始,
从branch1移⾄master的尖端。 我通过记住第⼀个参数是新提交,第⼆个参数是旧提交来记住语法。
所以,但是有什么⽤例可以移动树的⼀部分呢?
删除提交
虽然我要删除提交的第⼀个反射是git rebase -i ,但它并不总是最⽅便的。 它需要执⾏以下步骤:
1. 到要删除的第⼀个提交
2. 有效地运⾏git rebase -i命令
3. 在编辑器中,对于每个需要删除的提交,删除该⾏
4. 退出编辑器
如果要删除的提交是相邻的,则将rebase --onto更容易,因为您只需要新的和旧的提交,并且可以在⼀⾏中进⾏“删除”。
这是⼀个例⼦:
o---A---X---Y---Z master
要删除最后3个提交X , Y和Z ,您只需要:
git rebase--onto A Z
长期存在的远程分⽀机构
拥有长期存在的分⽀通常是⼀个坏主意,但有时是必需的。
假设您需要将应⽤程序的⼀部分迁移到新框架,库等。 对于⼩型应⽤程序,可以由⼀个⼩型⼯作队来完成。 主要开发团队在周末结束时会指⽰您在周五离开之前提交所有内容。 当他们星期⼀回来时,⼀切都已迁移。
可悲的是,⽣活并不总是那么轻松,对于这样的理想情况,应⽤程序可能太⼤。 在这种情况下,⼯作队将与主要团队同时在专门
的migration部门⼯作超过⼀个周末。 但是他们需要与main分⽀保持最新,并且仍然保持⼯作。
因此,他们不时地将migration分⽀重新设置在master的顶部:
git rebase--onto master old-root-of-migration
这与合并不同,因为您使历史记录保持线性。
当地分⾏
有时,出于多种原因,我想将更改保留在本地。 例如,我可能会修改代码质量⼯具的其他(或更严格的)规则。 在这种情况下,我想花时间评估这是否与整个团队相关。
如上所述,这是通过定期将我的本地tinker分⽀重新定为master 。
如上所述,它使我可以保持历史记录的线性,并根据需要更改与tinker相关的提交。 合并将阻⽌我执⾏此操作。提交更改是什么
结论
git rebase --onto可以有不同的⽤例。 最重要的问题与长期分⽀(⽆论是本地分⽀还是远程分⽀)的处理有关。
与往常⼀样,它只是⼯具带中的另⼀个⼯具,因此并⾮所有事物看起来都像钉⼦⼀样。
由于每个更改Git历史记录的命令,git rebase --onto应该只更改本地提交。 您已被警告!
更进⼀步:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论