将“混合”脏分支拆分为多个干净分支

时间:2019-01-09 08:48:29

标签: git git-cherry-pick

一段时间以来,我的git工作流程很糟糕-我在同一dirtybranch中对主题A,主题B和主题C进行了更改,实际上还对混合提交进行了更改。

我想解决这个问题,以便对每个这些都有一个清晰的branchAbranchBbranchC,以便以后可以对上游发出单独的合并请求。

我已经创建了branchA,使用了git cherry-pick --no-commit master..dirtybranch,然后简单地手动删除了关于subjectB和C的更改。此方法虽然效果不佳,但可以对B和C主题进行相同的操作,尽管它希望参与度更高(因为它们在代码中的混合程度更高)。

因此,我的问题是:

  • 是否有更优雅(即更简单)的方法来执行此操作,尤其是当您需要逐行浏览文件以选择要保留的更改时(gui?)?我知道例如。融合或kdiff,但我不确定如何在此处应用它们。
  • 由于我已经“挑选”了主题A对branchA的更改,因此有一种方法可以将dirtybranch的变化樱桃化为例如。 branchB“除了”我已经对branchA进行的更改? (同样,dirtybranch-> branchC“除外” branchAbranchB

1 个答案:

答案 0 :(得分:0)

  

我已经创建了branchA,使用git cherry-pick --no-commit master..dirtybranch,然后简​​单地手动删除了对subjectB和C的更改。

一种类似的方法是将git reset返回到dirtybrachmaster分支出来的地步。在这里,您可以创建一个新的branchA,使所有更改都处于未暂存和未提交状态。如果我将提交混在一起,并希望将更改重组为新的提交,通常会这样做。

要将更改分为不同的分支,您可以找到并提交branchA的所有更改,将其余的存储起来,回到主目录,创建branchB,应用存储(将所有更改从dirtybranach(来自branchA的内容除外),找到并提交branchB的更改,然后提交branchC的所有内容。

这可以解决您的第二点。对于GUI来说,使事情变得尽可能简单,我只能推荐GitKraken,它提供了一种非常舒适的方式来选择要暂存的文件的大块甚至单行。