在保留最新更改的同时从git中删除先前的提交?

时间:2013-08-02 23:03:54

标签: git bitbucket rebase

我无意中将api密钥信息添加到公共bitbucket repo中,并且认为我将学习如何将其删除。 6提交之后,我现在正在解决这个问题,并且在阅读像http://goo.gl/Lf463C这样的内容之后甚至不太明白。

我不想丢失我的HEAD提交,尤其是如果我通过火试验,所以我想我会问专家。我实际上没有问题擦拭公共回购,并重新承诺我最新的本地回购作为最初的,但不想失去我积累的学习曲线历史。

总而言之,假设我有20次提交,我需要从第10次提交中删除文件,而不会弄乱其他提交,我该怎么做?谢谢!

3 个答案:

答案 0 :(得分:1)

假设没有人在本地计算机上下载了不需要的文件,您可以删除该文件。

当您在相关分支上时使用以下内容:git rebase -i <branch_base>

当您收到提交列表旁边的单词列表时,您可以在有问题的提交上将单词pick更改为edit。 (pick表示使用提交,edit表示您希望在继续之前对该提交进行一些更改。)

从那里你可以使用git reset HEAD^来阻止你提交。然后添加回您希望存在于历史记录中的文件,并且不要在历史记录中添加您不想要的文件。跟进git commit --amend(添加提交消息),然后git rebase --continue

在您的rebase结束时,您的历史记录不应包含该文件。

答案 1 :(得分:1)

鉴于repo是公共的,你不能再将API密钥视为私有 - 你需要使api密钥失效并开始使用由而不是签入您的存储库(如果您希望属性文件存在于项目的文件层次结构中,请使用.gitignore)。

使用rebase删除这么小的项目中的坏东西是合理的(自从发生了坏事以来只有10次提交),否则你需要一个更强大的工具来为你重写Git历史:

...不是git filter-branch

说真的,不要使用git filter-branch,这对于像这样的任务来说是一次痛苦的经历。有一个更好的,不太知名的工具叫The BFG。在一个大型回购上,它的速度要快几百倍,而且更容易使用。

答案 2 :(得分:-1)

假设发表历史 -

您可以使用

 git revert commit-name