Git:在其他分支中拆分提交

Git:在其他分支中拆分提交,git,Git,我有以下情况: root -- A -- D ------------- H ------master \ \ \ \ \ \ - B -- C -- E -- F -- G -- I -- J -- dev 提交'F'包含一个错误修复,起初似乎与主分支无关,但几周后它被证明是重要的。所有的事情都已经完成了 但另一个问题是,“F”commit包含一些更改,其中只有一个与mast

我有以下情况:

root -- A -- D ------------- H ------master
    \          \              \
     \          \              \
      - B -- C -- E -- F -- G -- I -- J -- dev
提交'F'包含一个错误修复,起初似乎与主分支无关,但几周后它被证明是重要的。所有的事情都已经完成了

但另一个问题是,“F”commit包含一些更改,其中只有一个与master相关。所以我想说的是:

  • 将F拆分为两个单独的提交(一个用于相关更改[F1],另一个用于其他[F2])
  • 将F1与master合并
我不需要更改开发分支历史记录

除了手动diff+补丁,我还能做什么吗

我想象一下

root -- A -- D ------------- H ---K--master
    \          \      /-------\--/    
     \          \  /-F1-F2-\   \-----\        
      - B -- C -- E ------- F -- G -- I -- J -- dev

(对不起,线条艺术太草率了)

我会做以下事情:首先用
--no commit
将F提交给主分支,然后在主分支中进行所需的更改,删除所有其他内容。我知道这听起来不是一个完美的解决方案,但是当将F合并到master时,您还将获得F的所有祖先提交(来自dev分支:eCB):


我会使用手动差异和补丁,有什么问题吗?PS:您应该执行较小的提交;)当然,现在我强制所有开发人员这样做。但与git不同,我无法改变过去。:)
git checkout master
git stash
git cherry-pick --no-commit F
git reset && git add -p
# alternatively reset already staged changes:
git reset -p
git commit
git reset --hard
git stash pop