我不小心提交了log/test.log文件,但从未推送过它。现在我已经使用git rm命令删除了它。但是当我尝试推送时,仍然会有大量数据尝试传输。难道git rm命令不能解决这个问题吗?如果不能,我该如何解决?
我不小心提交了log/test.log文件,但从未推送过它。现在我已经使用git rm命令删除了它。但是当我尝试推送时,仍然会有大量数据尝试传输。难道git rm命令不能解决这个问题吗?如果不能,我该如何解决?
$ git reset HEAD^这将使您的索引返回到其父提交(HEAD^)上的状态。现在您有了一个重新开始的机会:按照第一次打算的方式添加和提交。
$ git rebase -i 57d0b28这将进入类似于以下的编辑器中:
从那里开始,删除有问题的文件(--cached
只会从索引中删除该文件)
$ git rm --cached 大恶文件 rm '大恶文件'
修改提交
$ git commit --amend
完成变基
$ git rebase --continue
git rebase -i
来编辑您的提交历史,删除 add
和 rm
。唯一需要注意的是,您必须小心不要编辑已经推送过的提交记录。
http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase-interactive
您问是否可以在提交中进行其他更改以及后续的提交,仍然可以执行此操作。这取决于情况。您应该能够编辑/删除任何未推送的提交,而不仅仅是最近的提交。但是,如果后续更改严重依赖于已删除提交中的更改(例如,您添加了一个文件,然后在后续提交中对其进行了编辑),则重新设置可能会失败。如果您删除提交,则将丢失该提交中的所有更改。我不知道有没有办法从提交中删除单个更改。如果您不想失去test.rb提交中的其他更改,则可以在删除提交之前生成补丁(使用git show <commitid> > /tmp/patch
或内置的git patch
功能)。然后编辑您的补丁文件以删除大型test.rb,但保留所需的更改,并将补丁重新应用到头部。
git log
或者gitk
命令,例如。 - Greg Bacon