git 我怎样才能用一次提交把一系列的改变重新定基到另一个分支中呢?

vvppvyoh  于 2023-01-07  发布在  Git
关注(0)|答案(2)|浏览(123)

我有如下分支:

L--M   <-- master
            /
...--A--B--C
            \
             D--E--F--G--H-I--J--K   <-- dev(HEAD)

我想做的是通过一次提交将EFGHIJ复制到master,如下所示:

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 --into之前修改的历史记录!
我怎么能只用一次提交就提交它们呢?

qacovj5a

qacovj5a1#

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

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

成交!

dced5bon

dced5bon2#

可以使用单个命令(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的组合可能是可行的(但话又说回来,您有一个管道,它实际上是两个命令)
EDIT:diff+apply可以工作,但是你需要另一个命令(commit),所以我认为使用rebase是最简单和最安全的选择。

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

相关问题