我需要找到一种使用Git删除分支上除最后(最近)的159个提交之外所有提交的方法。如果您认为创建一个新分支并将最后的159个提交移动到该分支中更好,请告诉我。你有什么想法吗?我已经尝试过this但它似乎只允许我回滚到某个特定的提交(而这不是我想要的)。
# create orphan branch
git checkout --orphan <branch>
git cherry-pick <SHA-1>...<SHA-1>
git checkout --orphan
创建一个新的孤儿分支,命名为[分支名],并从[起点]开始切换到它。在这个新分支上做的第一个提交将没有父提交,这将是一个全新的历史记录,与所有其他分支和提交都没有关联。
git cherry-pick <SHA-1>...<SHA-1>
应用主分支顶部提交所引入的更改,并创建一个包含此更改的新提交(s)。
...
的语法是提交范围,抓取从开始(不包括)到最后一个提交之间的所有提交。
git cherry-pick 160...1
。 - CodeWizardgit cherry-pick commit-hash
命令来选择单个提交记录,而无需指定范围。 - Muhammad Shoaib
git filter-branch
似乎是完成工作的最简单方法。你有什么建议让它起作用? - Leonard Lamprechtfilter-branch
的技巧在于(就像rebase一样)它会复制提交。与rebase不同的是,默认情况下通过保持原始源树不变来进行复制,并且仅映射父ID。如果您熟悉图形理论,基本上它通过复制指定子图(从X..Y符号表示)的节点来创建一个新的子图,然后将分支标签粘贴到最新的复制提交上。每个提交(如果您设置了索引或树过滤器,则为索引或树)都会在执行新的git commit-tree
之前通过各种过滤器进行传递,并带有来自映射的“-p”参数。 - torek