[英]Merge git branch without moving branch pointer
我正在寻找一种解决方案,将功能分支应用于git中的开发分支,而无需实际移动分支指针。 本质上,我想从功能分支创建一个提交,并确保它以某种方式指向原始分支(在日志中提及可能就足够了)。
我知道堆叠的git应该提供类似的功能,尽管那样会为标准工作流程引入新的命令,而我宁愿避免这样做。
我想要实现的是某种功能管理,它使我们可以应用/删除整个功能,同时保持修补程序分支本身的可见性。 如果我确实合并了分支,那么大多数尝试差异化更改的命令将无法执行我想要的操作,因为分支已经合并到了develop中。
我不能真正地顺从上游-有时存在并发更改,通过获取新标签并仅重新应用所需的功能(而不是解决冲突和还原冗余功能),更容易纠正这些错误,因此这种工作方式是不可能的。 另一方面,我确实希望看到更改,以便我可以对其进行重新设计以匹配新版本,或者稍后再提交。
实际上,有一种更简单的方法。 git merge
命令具有--squash
选项,该选项仅累积要合并的分支中的所有更改,并将它们添加到登台区域。
因此,您可以使用以下命令来完成所需的操作(当您在master上并且想要合并功能分支feature-foobar时):
$ git merge --squash feature-foobar
$ git commit -m "Implemented feature: foobar"
据我了解,您可以使用git rebase -i实现您的目标。 以下是您要实现的方案...
A--B--C(develop)
\
\D--E--F(feature)
您可以将DEF组合为名为G的单个提交,最终结果将是
A--B--C--G(develop)
\
\D--E--F(feature)
G是包含DEF中所有内容的单个提交,您可以轻松地将其从developer分支中删除。
因此,为了进行此手术,您可以...
git checkout feature_branch
建立一个临时分支...
git checkout -b temp
git rebase -i develop_branch
并会提示交互式编辑器...将提交D和E标记为南瓜,保留最后一行(提交)作为最后一次提交保存并退出
然后,提交G将基于您的开发分支。
A--B--C(develop)--G(temp)
\
\D--E--F(feature)
将开发重置到提交G上,并根据需要删除临时分支。
git checkout develop_branch
git reset --hard <shaSum of commit G>
git -D temp
而已!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.