繁体   English   中英

合并git分支而不移动分支指针

[英]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.

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