首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从历史中删除提交的最好方法是什么?

从历史中删除提交的最好方法是什么?
EN

Stack Overflow用户
提问于 2017-12-11 21:42:32
回答 2查看 119关注 0票数 2

我想从我的GitHub存储库中删除大约两年前的7/8提交。只有2/3的提交涉及任何代码,其余的只是添加和删除配置文件。

一些以前的开发人员上传并删除了超过650个重复的配置文件,这弄乱了我们的github统计页面。Stat Graph

我们试着用git rebase -i删除它们,但花了6个小时,大部分代码都消失了。

我们如何在不破坏其他提交历史的情况下删除这些古老的提交?我们目前正在对存储库中的所有代码进行重新编码,所以如果不保留这些单独提交的更改,这并不是什么大问题,但我们希望保留与旧代码一起进行的所有统计数据。

EN

回答 2

Stack Overflow用户

发布于 2017-12-11 22:30:56

强制性危险:重写项目历史是非常危险的!在尝试此操作之前,请确保您有备份,并极其谨慎地进行操作!

要删除项目中的一个特定提交(例如,几年前的提交),您可以:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git rebase -p --onto SHA^ SHA

其中SHA是要删除的提交。

这些选项的文档如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-p, --preserve-merges
  Recreate merge commits instead of flattening the history by replaying
  commits a merge commit introduces. Merge conflict resolutions or
  manual amendments to merge commits are not preserved.

--onto <newbase>
  Starting point at which to create the new commits. If the --onto
  option is not specified, the starting point is <upstream>. May
  be any valid commit, and not just an existing branch name.

进行此更改后,您需要:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git push --force origin master
#        ^^^^^^^
#          !!!
票数 1
EN

Stack Overflow用户

发布于 2017-12-11 22:19:58

需要两个步骤:

丢弃所有杂乱的提交:

  1. Rewrite git history

  • Rebase from the last good commit

git rebase --交互式良好提交

  • 或filter-branch

-f筛选器-分支--树-筛选器'rm git配置文件‘头

  1. 强制推送到主机:

git推送--强制源主机

请注意,强烈不鼓励强制推送,因为它会使您的repo的所有当前克隆不一致的。任何冲突都必须手动修复。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47761910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文