Git:将提交分离到其他分支

4

我有如下情况:

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

提交“F”包含一个错误修复,起初似乎与主分支无关,但几周后证明它很重要。一切都已经提交和推送。

但另一个问题是,“F”提交包含几个更改,只有其中一个与主分支相关。所以我想要的是:

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

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

除了手动差异+补丁外,我还能做些什么吗?

我想象中的解决方案是:

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

(抱歉画的线条比较粗糙)


我会选择手动差异和补丁,这有什么问题吗?附注:你应该提交更小的代码块 ;) - Simon
当然,现在我强制所有开发人员这样做。但与git不同的是,我无法改变过去。 :) - user986654
1个回答

8
我会这样做:首先使用--no-commit将提交 F 带到您的主分支,然后在主分支中暂存您需要的更改并删除其他内容。我知道这听起来并不是完美的解决方案,但如果将 F 合并到主分支中,您也将获得 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接