如何通过一次提交将一系列更改变基为另一个分支?



>我有如下分支:

L--M   <-- master
/
...--A--B--C

D--E--F--G--H-I--J--K   <-- dev(HEAD)

我想做的是复制 EFGHIJ 以通过一次提交来掌握,如下所示:

L--M--N   <-- master
/
...--A--B--C

D--E--F--G--H-I--J--K   <-- dev(HEAD)

N应包含 EFGHIJ 更改。

我可以使用变基 --onto 命令将更改变基到主

git rebase --onto master E~1 J

如果我使用 git push,主节点中就会存在EFGHIJ更改。 也许我需要使用 git rebase -i 命令将它们更改为一个,但是,问题是,我看不到git rebase --onto 应用的先前更改的更改历史记录!

如何仅通过一次提交来提交它们?

运行git rebase --onto master E~1 J之后

git reset --soft M
git commit -m 'changes from E F G H I and J'

做!

可以使用单个命令(rebase -i(,但需要手动干预: 您需要编辑变基的待办事项列表:

git rebase -i --onto M E^ J
# then in vim: :2,$s/^pick/fixup/
# save and close vim, voilà

如果您需要特定/不同的提交消息,请将第一行中的pick更改为reword并相应地输入消息。


您对单个命令的要求从何而来?让我多想一想,使用 diff+apply 的组合可能是可能的(但话又说回来,你有一个管道,它实际上是两个命令(

编辑:diff + apply有效,但您需要另一个命令(提交(,所以我认为使用rebase是最简单,最安全的选择。为了完整起见:

git checkout M
git diff E^ J | git apply
git commit -m 'Combination of commits E^..J'

最新更新