在我的
Third last commit
中,我提交了一个包含更改的文件,“four
”:
6e581cc (HEAD -> main) Last commit
A one
bbbce71 Second last commit
A two
083f1fb Third last commit
M four
A three
7752028 Fourth last commit
A four
我想从该提交中删除该文件(并放弃更改,或将更改添加到当前的新提交中 - 我可以轻松复制粘贴更改,因为它只是一个文件)
我尝试过
git rebase -i 7752028
(最后第四次提交)并将提交从 pick
更改为 edit
edit 083f1fb Third last commit
pick bbbce71 Second last commit
pick 6e581cc Last commit
开始变基并 git 告诉我
Stopped at 083f1fb... Third last commit
后,我跑了
git reset four
尝试从为此提交暂存的文件中删除
four
。
但是当我跑步时
git commit --amend
紧接着,我仍然被告知提交将文件记录为包含:
Third last commit
# ...
# Changes to be committed:
# modified: four
# new file: three
#
事实上,运行
git rebase --continue
和 git log --oneline --name-status -1 083f1fb
仍然显示与以前完全相同的结果:
083f1fb Third last commit
M four
A three
如何从历史提交中取消添加该文件?
我不想从存储库中删除该文件,
main
应该仍然拥有该文件,但来自083f1fb..main
的提交不应具有083f1fb
引入的更改。
开始变基并 git 告诉我
后,我跑了Stopped at 083f1fb... Third last commit
git reset four
您应该运行
git rm four
。然后按照您的描述继续操作。
rebase之后,您可以将diff恢复到rebase之前(应该只是添加的文件
four
):
git checkout -p @{1}
...您用
y
确认。然后 git status
应该显示
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: four
你可以创建一个新的提交,只添加
four
。