如何从历史提交中取消添加文件?

问题描述 投票:0回答:1

在我的

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
1个回答
0
投票

开始变基并 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

© www.soinside.com 2019 - 2024. All rights reserved.