如果可以的话,请看一下图片,我觉得这样更容易理解
git rebase --onto main HEAD~7 导致意外提交,而不是单个“合并提交”
所有 PR 都被接受为“压缩并合并”以更新 main
我想要实现的目标: 我试图在分支 A 上运行
git merge main
,因为 main 已经更新了 3 次,我想要获得新的更改
我的期望: 正常的
git merge main
通常只生成一个提交记录,并且 main 中的所有新内容都将被提取并拉入我的工作分支 (A)
我已经尝试过并得到了什么
git merge main
: 出现了 9 个提交,它们是: 1. 由合并 main 生成的正常提交信息 2. 3 从 main 提交信息,因为它在创建分支 (A) 后已更新 3 次 3. 5 提交信息从B分行
git rebase main
:来自远程 A 的 7 个提交等待拉取,15 个本地提交等待推送(3 个主分支 + 5 个分支 B + 7 个分支 A)
git rebase --onto main HEAD~7
:与rebase基本相同(目前我在这个分支A上有7次提交,所以我使用了HEAD~7)
git rebase -i main
: VIM 中出现了分支 A 的 7 个提交,我输入了 :wq
,这对我来说都是必需的,运行的结果就像 rebase 和 rebase HEAD~7
你有:
b--...-b (Branch B, 5 commits)
/ \
m---m----m-----m---m---m (Branch main, 3 new commits)
\
a---a...a (Branch A, 7 commits)
请注意,rebase --onto main A B将所有内容变基after提交A(不包括A)到B(如果未指定则为HEAD)。
最好:
git status
干净main
)即:
git switch main
git pull
git rebase --onto main A~7 A
git switch main
git merge --no-ff A
这应该给你:
b--...-b (Branch B, 5 commits)
/ \
m---m----m-----m---m---m-------------m (Branch main, A merge non-fast-forward)
\ /
a'---a'...a' (Branch A rebase onto main, 7 commits)