如何仅一次提交就将一系列更改重新建立到另一个分支?

时间:2019-10-20 15:42:15

标签: git git-rebase

我有如下分支:

             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更改。

我可以使用rebase --onto命令将更改重新设置为master

git rebase --onto master E~1 J

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

我如何仅一次提交即可提交它们?

2 个答案:

答案 0 :(得分:2)

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

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

完成!

答案 1 :(得分:1)

可以使用单个命令(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'
相关问题