git - rebase 废墟 merge

标签 git git-merge git-rebase

我有两个独立的分支。我在一个多月的时间里对它们进行了不同的处理。我将一个分支(我们称它为 apple) merge 到另一个分支(我们称它为 orange),方法是检查 orange 并执行 git merge --no- ff apple 一切顺利。在 gitk 中,我可以清楚地看到每个分支都有自己的历史,并且它在橙色的 merge 提交中 merge 在一起。

后来我意识到橙色的提交是不正确的,构建过程中有错误,我必须编辑橙色的早期提交。我使用 git rebase -i HEAD~19,选择提交并将 pick 更改为 edit。所以我编辑了提交,一切都很好,然后我完成了 rebase 。我回到 gitk,这两个分支的所有历史都是橙色的线性历史。

那么我是不是搞砸了,还是事情本该如此?我使用 git reflog 返回到我进行 merge 时的状态,然后我又进行了一次重置以努力返回到橙色 merge 之前的正确位置,然后我进行了 rebase 并修复了该提交,然后我进行了 merge 。现在一切看起来都像我期望的那样,来自分支的提交没有交织在一起。

为了将来引用,有人可以告诉我如何在我 merge 到另一个分支的分支上重新提交提交,而不会以交错提交(线性历史)结束吗?

如果我的术语不正确,请随时进行编辑。再次感谢

最佳答案

这是 rebase 的预期行为。 它有效地重写了分支的历史,这导致它(默认)丢失 merge 和其他元数据,留下一个直接的、简化的分支。

您可以使用以下方式保留 merge

git rebase --preserve-merges

但是将 --preserve-merges--interactive 结合使用会出现一些问题。小心行事。

关于git - rebase 废墟 merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12966667/

相关文章:

git - 通过 Visual Studio 2013 将 URL 更改为远程 Git 存储库?

git - 将 merge 转换为 rebase,而无需再次执行 merge

git - 如果编辑了相同文件但不同行,如何在 Git/IntelliJ 中强制手动 merge ?

git - 使用 git 追加分支提交

git - 如果仅在个人分支上重新定位推送的提交

git - 无法将 EC2 实例的 ssh-key 添加到 bitbucket 帐户

python - 如何使用 GitPython 进行 pull ?

git - 如何在大型提交中找到单个重大更改

Git basic - 将旧分支 merge 到master

Git 工作流程和 rebase 与 merge 问题