[英]GIT: how to rebase so that the latest commit is preserved in feature branch
从SVN到GIT世界的新过渡。
我有我的主分支: A(初始提交)-B-C-D-E
我的功能分支: A(初始提交)-B-Z
我想将我的功能分支重新设置为母版,例如: ABCDEZ
这怎么可能呢? 我尝试签出到功能分支并执行git rebase master,但是显然这给了我很多冲突,并且新添加的功能文件被删除了。 我知道它像A-B-Z-C-D-E
以下是我的一天(感谢@mrek的评论。他的建议提供了指导):
git checkout功能分支
git rebase-进入masterbranch featurebranch ^
(^表示由featurebranch ^引用的featurebranch的父提交)
有关更多信息: git rebase --onto解释
假设您的功能分支是从master创建的,这将完全满足您的需求:
git checkout feature
git rebase master
# fix possible conflicts
git checkout master
git merge feature
首先,功能分支上的git rebase master
将获得Z
并将其移动到临时空间。 然后使C
, D
和E
成为feature
,最后从E
顶部的临时区域应用Z
导致ABCDEZ
在这一点上,如果有任何冲突,您可以简单地运行git mergetool
,解决冲突,然后git rebase --continue
。
如果在解决冲突时遇到任何问题可以取消,请运行git rebase --abort
试。
在此之后,随后的merge
回主节点将是一个fast-forward
(无冲突)。
我认为这是一个好方法,因为您可以使功能分支与master保持最新,并且始终将新代码放在最重要的位置,并且可以直接在功能分支上解决任何潜在的冲突。
同样,与主服务器的合并总是干净的,您可以使用git merge feature --no-ff
创建合并提交。
值得一提的是,这种方法已经为我使用了很长时间。 我使用kdiff3
作为mergetool
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.