在这里,我有来自我的回购的提交日志。您可以看到“Merge branch ... into ...”提交,并在提交之后,分支被合并。
我需要删除该合并提交,但不要丢弃更改。 默认的变基不会显示那些合并提交。
答案 0 :(得分:9)
如果你想在不包括合并提交的情况下应用提交的更改(正如Roland Smith所指出的那样通常被认为是不良做法),你可以使用git rebase
来完成以下工作流程:
git checkout master
git reset --hard <hash of prior commit>
。确保您正在处理的分支上没有未提交的更改,否则此命令将删除它们。dev
):git checkout dev
。dev
重新加入主人。这将使dev的HEAD
提交成为master指向的最新提交的上游:git rebase master
(有关详细信息,请参阅the docs)。git checkout master
)并合并新分支git merge dev
。这会将更改提取到master而不添加合并提交。master
分支看起来没问题,您就必须更新任何远程存储库上的分支。由于您要撤消之前的历史记录,因此当您推送分支时,您必须使用远程仓库的--force
(或-f
)标记来接受更改,即:git push origin master --force
。 这就是它的全部。执行此操作后,从master分支的dev
上的提交现在应该是上面的合并前提交的上游。
注意:运行rebase将永久更新已更改分支的提交历史记录。为安全起见,我建议采用以下两种方法之一:
git reset --hard <original_commit_hash>
将分支放回原始提交。在指向原始提交的rebase之前制作两个分支的备份副本:
git checkout -b master_bk git checkout -b dev_bk