git - 删除在错误的 rebase 之后引入的重复提交

标签 git version-control rebase

我有 2 个分支,masterfeature。 Master 偶尔会收到快速上线所需的小调整。完成这些调整后,master 将重新定位为 feature,以便该功能保持最新。

在 master 上更改的文件通常与 feature 上的大部分开发无关,但我遇到了大量复杂的 3 向 merge 冲突。

在查看了feature 的提交日志后,我发现这个问题有几个重复项,我正在尝试通过交互式 rebase 来解决它。

我的问题是:

这是解决该问题的最佳解决方案吗?如果是的话,我是否可以删除重复项并从根本上构建我期望的历史记录?我还会删除哪些重复项,更高(较旧的原件)或更低(较新的副本)。

摘自 git rebase master -i 的摘要列表:

pick 0eb277c Commit A
pick ced2556 Commit B
pick 640e049 Commit C
pick b248ff7 Commit D
pick 9903094 Commit E
pick ebc279d Commit A
pick 313385b Commit F
pick 0d55178 Commit G
pick c8f09f9 Commit H
pick e877be3 Commit I
pick 9859aa0 Commit J
pick c3c8e0f Commit K
pick 8abc68c Commit L
pick 84a5c89 Commit A
pick 30570e4 Commit B
pick 937ff2f Commit C
pick 8e6d911 Commit D
pick 1dd3a09 Commit E
pick fe79288 Commit F
pick 9e790bb Commit G
pick 0924916 Commit H
pick 90d59d7 Commit I
pick ba06c55 Commit J
pick 7452fad Commit K  ** Dupes end here** and features then has 30+ more commits.
pick d1dca3d Commit M
pick 6c85f76 Commit N
pick ad53b78 Commit O
pick f166471 Commit P

最佳答案

要删除重复的提交,您必须查看 git rebase master -i 生成的列表并通过使用箭头键在列表中上下导航来删除重复项,在您想要 drop 的提交上按 d .

(master 可以替换为提交哈希或任何有效的重新基点)

一旦您删除了所有重复项并拥有一个看起来像您期望的历史记录的提交列表,请按 esc 并输入 !wq 退出 rebase 屏幕。然后按 enter

re-base 然后将继续并应用您的提交列表 pick编辑到您的重新基点。

关于git - 删除在错误的 rebase 之后引入的重复提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38454532/

相关文章:

git - 我们如何使用 CommitIds 检查两个对象(即存储库中的文件内容)的相等性?

git - 如何使用 SmartGIT 在一次提交中将多个提交从分支 merge 到主控?

templates - 从 CloudFormation 模板标记父堆栈

git 更改分支的起源(rebase)

git - 如何正确使用 git merge --squash

git - 如何在git中关注一个文件

amazon-web-services - AWS Cloudformation 的版本控制和管道

git - 重新设置一个分支,包括它的所有子分支

mercurial - 如果在不同的分支上,为什么我不能重新定位到源变更集的祖先?

git rebase 和 deleted rebasing 分支导致 "Interactive rebase already started"错误消息