Git如何在功能分支上保留最新的N次提交并删除所有内容

时间:2019-07-15 15:07:20

标签: git

我的功能分支上总共进行了44次提交。 最近的24次提交中有我的。剩下的旧提交我需要删除。 那些由于错误的rebase操作而出现在分支上,由我执行。 我确定我的提交是最新的,并且在git日志列表中并显示在顶部。

请帮助。

1 个答案:

答案 0 :(得分:1)

首先,可能在错误重新设置基准之前检查reflog的状态可能比尝试修复导致的混乱更容易。

git reflog
# spot the commit you want to go back to, then 
git reset --hard <goodCommit>
# or the more cautious alternative, creating a new branch from the state to recover
git checkout -b <recovery-branch> <goodCommit>

但是,如果由于某种原因无法使用reflog解决方案来回答这个问题,如果您已经清楚地确定了要保留在分支中的提交,只需从预期的基础上重新创建一个分支,然后执行Cherry-重新选择提交内容:

git checkout -b <new-branch> <base-branch>

# with the oldest good commit you spotted on the failed branch
git cherry-pick <oldestGoodCommit>^..<failed-branch>

(在这里注意^,它的作用是引用提交的父对象)
(而且..不是占位符或其他任何东西,实际上是范围选择的标志。A..B的意思是“ B中的所有内容除了A“)

但是,如果您选择此解决方案,请为沿途的潜在冲突做准备(这本来不是一件坏事,但与替代方法相比可能会付出很多努力)。