如何删除最后3次提交并重新开始更改?

时间:2016-03-23 19:49:00

标签: git

我提交了一个> 100MB(github的限制)3个提交前的文件,它不会让我推送我的新提交。

我想在保留我的工作的同时删除这3个提交,所以我可以重新提交它们,但没有大量文件。

最简单的方法是什么?

PS我只能访问git命令行。

1 个答案:

答案 0 :(得分:0)

完整信息可以在这篇文章中找到:
How to move HEAD back to a previous location? (Detached head)

最好的选择是做一些没有在那里被剥夺的东西,

git reset HEAD --mixed HEAD^3

它将检查第3次提交并使用上述帖子从此时开始继续工作。

按照其中描述的结帐:

git checkout

git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back

这将检查指向所需提交的新分支 此命令将结帐到给定的提交 此时,您可以创建一个分支,并从此开始工作。

# Checkout a given commit. 
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
#in order to be able to update the code.
git checkout <commit-id>

# create a new branch forked to the given commit
git checkout -b <branch name>

为了做一个git squash,请按照以下步骤操作:

// X is the number of commits you wish to squash, in your case 6
git rebase -i HEAD~X

一旦你压缩你的提交 - 选择e来编辑提交。

enter image description here

如果您只想从repo中删除大文件,请使用以下命令: 你应该使用这个工具:

https://rtyley.github.io/bfg-repo-cleaner/

这是完成此类任务的完美工具

  

BFG Repo-Cleaner

     

git-filter-branch的替代品。

     

BFG是git-filter-branch的一种更简单,更快速的替代方法,用于清除Git存储库历史记录中的错误数据

     
      
  • 删除疯狂的大文件
  •   
  • 删除密码,凭证和密码其他私人数据
  •   

示例(来自官方网站)

  

在所有这些示例中,bfg是java -jar bfg.jar的别名。

# Delete all files named 'id_rsa' or 'id_dsa' :
bfg --delete-files id_{dsa,rsa}  my-repo.git