一段时间以来,我的git工作流程很糟糕-我在同一dirtybranch
中对主题A,主题B和主题C进行了更改,实际上还对混合提交进行了更改。
我想解决这个问题,以便对每个这些都有一个清晰的branchA
,branchB
和branchC
,以便以后可以对上游发出单独的合并请求。
我已经创建了branchA,使用了git cherry-pick --no-commit master..dirtybranch
,然后简单地手动删除了关于subjectB和C的更改。此方法虽然效果不佳,但可以对B和C主题进行相同的操作,尽管它希望参与度更高(因为它们在代码中的混合程度更高)。
因此,我的问题是:
branchA
的更改,因此有一种方法可以将dirtybranch
的变化樱桃化为例如。 branchB
“除了”我已经对branchA
进行的更改? (同样,dirtybranch
-> branchC
“除外” branchA
和branchB
)答案 0 :(得分:0)
我已经创建了branchA,使用git cherry-pick --no-commit master..dirtybranch,然后简单地手动删除了对subjectB和C的更改。
一种类似的方法是将git reset
返回到dirtybrach
从master
分支出来的地步。在这里,您可以创建一个新的branchA
,使所有更改都处于未暂存和未提交状态。如果我将提交混在一起,并希望将更改重组为新的提交,通常会这样做。
要将更改分为不同的分支,您可以找到并提交branchA
的所有更改,将其余的存储起来,回到主目录,创建branchB
,应用存储(将所有更改从dirtybranach
(来自branchA
的内容除外),找到并提交branchB
的更改,然后提交branchC
的所有内容。
这可以解决您的第二点。对于GUI来说,使事情变得尽可能简单,我只能推荐GitKraken,它提供了一种非常舒适的方式来选择要暂存的文件的大块甚至单行。