将一个 'mixed' 脏分支拆分为多个干净分支
Splitting a 'mixed' dirty branch into multiple clean branches
有一段时间我的 git 工作流程很糟糕——我在同一个 dirtybranch
中对主题 A、主题 B 和主题 C 进行了更改,实际上也在混合提交中进行了更改。
我想把它清理干净,这样我就有了一个干净的 branchA
、branchB
和 branchC
,这样我以后就可以单独提出合并请求上游。
我已经创建了 branchA,使用了 git cherry-pick --no-commit master..dirtybranch
,然后简单地手动删除了关于主题 B 和 C 的更改。这虽然不优雅,但我可以对主题 B 和 C 做同样的事情,尽管它是希望更多地参与(因为它们在代码中更紧密地混合在一起)。
因此我的问题是:
- 是否有更优雅(即更简单)的方法来执行此操作,尤其是当您需要逐行浏览文件以选择要保留的更改时(gui?)?我知道例如。 meld 或 kdiff 但我不确定如何在此处应用它们。
- 因为我已经 'picked out' 将主题 A 更改为
branchA
,有没有一种方法可以将 dirtybranch
中的更改更改为例如。 branchB
"except for" 我已经对 branchA
进行了更改? (同样,dirtybranch
->branchC
"except for" branchA
和 branchB
)
I have already created branchA, used git cherry-pick --no-commit master..dirtybranch and then simply manually removed the changes regarding subjectB and C.
类似的方法是 git reset
回到 dirtybrach
从 master
分支出来的点。在那里,您可以创建一个新的 branchA
,保持所有更改未暂存和未提交。如果我混淆了我的提交并想将更改重组为新的提交,我通常会这样做。
要将更改分离到不同的分支中,您可以找到并提交 branchA
的所有更改,存储其余部分,返回 master,创建 branchB
,应用存储(给您所有来自 dirtybranach
的更改,但来自 branchA
的更改除外),找到并提交 branchB
的更改,然后再次提交 branchC
.
的所有更改
这解决了你的第二点。至于使整个事情尽可能简单的 GUI,我只能推荐 GitKraken,它有一种非常舒适的方式来 select 您想要暂存的文件的大块甚至单行。
有一段时间我的 git 工作流程很糟糕——我在同一个 dirtybranch
中对主题 A、主题 B 和主题 C 进行了更改,实际上也在混合提交中进行了更改。
我想把它清理干净,这样我就有了一个干净的 branchA
、branchB
和 branchC
,这样我以后就可以单独提出合并请求上游。
我已经创建了 branchA,使用了 git cherry-pick --no-commit master..dirtybranch
,然后简单地手动删除了关于主题 B 和 C 的更改。这虽然不优雅,但我可以对主题 B 和 C 做同样的事情,尽管它是希望更多地参与(因为它们在代码中更紧密地混合在一起)。
因此我的问题是:
- 是否有更优雅(即更简单)的方法来执行此操作,尤其是当您需要逐行浏览文件以选择要保留的更改时(gui?)?我知道例如。 meld 或 kdiff 但我不确定如何在此处应用它们。
- 因为我已经 'picked out' 将主题 A 更改为
branchA
,有没有一种方法可以将dirtybranch
中的更改更改为例如。branchB
"except for" 我已经对branchA
进行了更改? (同样,dirtybranch
->branchC
"except for"branchA
和branchB
)
I have already created branchA, used git cherry-pick --no-commit master..dirtybranch and then simply manually removed the changes regarding subjectB and C.
类似的方法是 git reset
回到 dirtybrach
从 master
分支出来的点。在那里,您可以创建一个新的 branchA
,保持所有更改未暂存和未提交。如果我混淆了我的提交并想将更改重组为新的提交,我通常会这样做。
要将更改分离到不同的分支中,您可以找到并提交 branchA
的所有更改,存储其余部分,返回 master,创建 branchB
,应用存储(给您所有来自 dirtybranach
的更改,但来自 branchA
的更改除外),找到并提交 branchB
的更改,然后再次提交 branchC
.
这解决了你的第二点。至于使整个事情尽可能简单的 GUI,我只能推荐 GitKraken,它有一种非常舒适的方式来 select 您想要暂存的文件的大块甚至单行。