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

时间:2011-10-23 15:12:22

标签: git

我有以下情况:

root -- A -- D ------------- H ------master
    \          \              \
     \          \              \
      - B -- C -- E -- F -- G -- I -- J -- dev

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

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

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

我不需要更改开发分支历史记录。

除了手动diff + patch之外,我可以做什么吗?

我想像

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

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

1 个答案:

答案 0 :(得分:8)

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

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