我不小心添加并提交了一个(巨大的)日志文件到我的本地git仓库,然后执行了git rm
(没有--cached)。所以历史看起来是这样的:
> git status
modified: Foo.java
Untracked files:
(use "git add <file>..." to include in what will be committed)
huge_file.log
nothing added to commit but untracked files present (use "git add" to track)
然后我做了git add .
:
> git add .
> git status
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
modified: Foo.java
new file: huge_file.log
然后(我忽略了我已经添加了huge_file.log
)我做了一个git commit
:
> git commit -am "Foo commit"
[master 7582793] Foo commit
1 file changed, 1 insertions(+), 0 deletions(-)
create mode 100644 huge_file.log
然后我意识到我已经添加并提交了huge_file.log
。所以我想我可以通过执行git rm huge_file.log
来撤销它:
> git rm huge_file.log
> git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: huge_file.log
这时,我才意识到自己犯了什么错:我不能提交并推送到master,因为这意味着推送huge_file.log
,然后删除huge_file.log
。不幸的是,我不能推,因为我们有一个文件限制为100 MB每个文件和huge_file.log
是超过1 GB。
那我现在能做什么我不能简单地将HEAD重置为以前的提交,因为我在Foo.java
中做了很多我不想撤销的更改。
有没有办法改变以前的提交以某种方式删除huge_file.log
。
请注意,Foo.java
只是StackOverflow上更好的可读性的代表。我已经修改了大约10个文件,并在每个文件中修改了许多行代码,我不想丢失这些更改。
我现在该怎么办?
3条答案
按热度按时间lndjwyie1#
如果只是在最后一次提交中,则执行
git rm huge_file.log
,然后执行git commit --amend
。Git允许你修改你最近一次犯下的错误。真的
q0qdq0h22#
你可以做
其中
[n]
是您希望重置的过去提交的数量。例如,要撤消上次提交
然后继续提交文件,就像您通常所做的那样。
cyvaqqii3#
如果你还没有承诺。可以使用
git restore --source=HEAD --staged --worktree <file>