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

use*_*654 4 git

我有以下情况:

root -- A -- D ------------- H ------master
    \          \              \
     \          \              \
      - B -- C -- E -- F -- G -- I -- J -- dev
Run Code Online (Sandbox Code Playgroud)

提交'F'包含一个错误修正,起初似乎与主分支无关,但几周之后它被证明是重要的.一切都已经被提交和推动.

但另一个问题是'F'提交包含一些更改,其中只有一个与master相关.所以我想要的是:

  • 将F拆分为2个单独的提交(一个用于相关更改[F1],另一个用于其他[F2])
  • 将F1与主人合并

我不需要更改dev分支历史记录.

除了手动差异+补丁,我可以做任何事吗?

我想象的东西

root -- A -- D ------------- H ---K--master
    \          \      /-------\--/    
     \          \  /-F1-F2-\   \-----\        
      - B -- C -- E ------- F -- G -- I -- J -- dev
Run Code Online (Sandbox Code Playgroud)

(对于草率的线条艺术感到抱歉)

kni*_*ttl 8

我将执行以下操作:首先将提交F提交--no-commit到您的主分支,然后在master中进行所需的更改,删除其他所有内容.我知道这听起来不是完美的解决方案,但是当将F合并到master时,你也会获得F的所有祖先提交(来自dev分支:ECB):

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
Run Code Online (Sandbox Code Playgroud)