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

标签 git

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

请帮忙。

最佳答案

首先,检查您的 reflog 可能会更容易一些。对于错误 rebase 之前的状态,而不是尝试修复由此产生的困惑。

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>

但是,要回答是否由于任何原因无法使用引用日志解决方案的问题,如果您已经清楚地确定了要从分支中保留的提交,只需从预期的基础重新创建一个分支,然后樱桃-重新选择您的提交:

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 上的所有内容”)

但是,如果您选择此解决方案,请为潜在的冲突做好准备(这本身并不是一件坏事,但与替代方案相比可能会花费大量精力)。

关于Git 如何在功能分支上保留最新的 N 次提交并删除所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57042552/

相关文章:

git - "check out code"在行尾的 git 文档中意味着什么?

git - 如何克隆没有提交的裸 git 存储库并在克隆过程中获取正确的 HEAD 引用?

Git Merge 跳过提交

linux - 致命的 : bad config file line 1 in/home/trx/. gitconfig

Git: pull 一个重新设置的分支

Git 说一个文件被修改了,即使它没有

git - 从 master 恢复本地分支的提交

Git 工作流 : commit ! = 操作系统保存

git - VS Code v1.70 merge 编辑器 UI 已更改。如何恢复?

xcode - github 上新创建的分支未显示在 Xcode "switch to branch"选项中