繁体   English   中英

GIT:如何重新设置基础,以便在功能分支中保留最新提交

[英]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并将其移动到临时空间。 然后使CDE成为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM