我有以下情况:
root -- A -- D ------------- H ------master
\ \ \
\ \ \
- B -- C -- E -- F -- G -- I -- J -- dev
提交'F'包含一个错误修正,起初似乎与主分支无关,但几周之后它被证明是重要的。一切都已经被提交和推动。
但另一个问题是'F'提交包含一些更改,其中只有一个与master相关。所以我想要的是:
我不需要更改开发分支历史记录。
除了手动diff + patch之外,我可以做什么吗?
我想像
root -- A -- D ------------- H ---K--master
\ \ /-------\--/
\ \ /-F1-F2-\ \-----\
- B -- C -- E ------- F -- G -- I -- J -- dev
(对于草率的线条艺术感到抱歉)
答案 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