我有一段时间的git工作流程很糟糕——我在同一个dirtybranch
中对主题a、主题B和主题C进行了更改,事实上,在混合提交中也进行了更改。
我想清除这一点,这样我就可以为每一个都有一个干净的branchA
、branchB
和branchC
,这样我以后就可以对上游进行单独的合并请求。
我已经创建了分支A,使用了git cherry-pick --no-commit master..dirtybranch
,然后简单地手动删除了关于主题B和C的更改。这很有效,尽管它很不雅,我也可以对主题B和主题C做同样的事情,尽管它希望更多地参与进来(因为它们在代码中更紧密地混合在一起)。
因此,我的问题是:
- 有没有一种更优雅(即更简单)的方法可以做到这一点,尤其是当您需要逐行浏览文件以选择要保留的更改(gui?)时?我知道例如meld或kdiff,但我不知道如何在这里应用它们
- 由于我已经将受试者A的更改"挑选"到
branchA
中,有没有办法将dirtybranch
中的更改挑选到例如branchB
中,"除了"我已经放入branchA
中的更改?(同样,dirtybranch
->branchC
"除了"branchA
和branchB
)
我已经创建了branchA,使用了gitcherry-pick——没有提交master。。dirtybranch,然后简单地手动删除关于主题B和C的更改。
类似的方法是git reset
回到dirtybrach
从master
分支出来的点。在那里,您可以创建一个新的branchA
,使您的所有更改保持未记录和未提交状态。如果我混淆了提交并想将更改重组为新的提交,我通常会这样做。
要将更改分为不同的分支,您可以找到并提交branchA
的所有更改,隐藏其余更改,返回master,创建branchB
,应用隐藏(为您提供dirtybranach
中的所有更改(除了branchA
中的更改)),找到并提交branchB
的更改,并为branchC
再次提交所有更改。
这解决了你的第二点。至于让这一切尽可能简单的GUI,我只能推荐GitKraken,它有一种非常舒适的方式来选择你想要暂存的文件的大块甚至单行。