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



我正在寻找一种解决方案,将功能分支应用于git中的开发分支,而无需实际移动分支指针。从本质上讲,我想创建一个功能分支的单一提交,并确保它以某种方式指向原始分支(在日志中提及可能就足够了)。

我知道堆叠的git应该提供类似的东西,尽管这会给标准工作流引入新的命令,这是我宁愿避免的。

我想要实现的是某种功能管理,它允许我们应用/删除整个功能,同时保持补丁分支本身的可见性。如果我合并分支,大多数试图区分更改的命令将不会做我想要的,因为分支已经合并到开发中。

我不能真正遵循上游-有时并发的更改更容易通过获得新的标签和只重新应用需要的功能来纠正,而不是解决冲突和恢复冗余的功能-所以这种工作方式是不可能的。另一方面,我确实希望看到更改,这样我就可以重新制作它以匹配新版本,或者在稍后的时间提交上游。

实际上,有一个更简单的方法。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)

可以将D-E-F合并为一个单独的提交,命名为G最后的结果将是

   A--B--C--G(develop)
    
     D--E--F(feature)

G是一个单独的提交,包含了D-E-F中所有的东西,你可以很容易地从开发分支中取出它。


为了处理这个手术,你可以输入....

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

就是这样!

最新更新