如何从最新提交中删除文件?


当前回答

如果你不再需要那个文件,你可以

git rm file
git commit --amend
git push origin branch

其他回答

一些对我有用的东西,但仍然认为应该有更好的解决方案:

$ git revert <commit_id>
$ git reset HEAD~1 --hard

只需将要放弃的更改保留在另一个提交中,检查其他人

$ git commit --amend // or stash and rebase to <commit_id> to amend changes
git checkout HEAD~ path/to/file
git commit --amend

如果您想保留提交(可能您已经花了一些时间编写了详细的提交消息,不想丢失它),并且您只想从提交中删除文件,而不是完全从存储库中删除文件:

git checkout origin/<remote-branch> <filename>
git commit --amend

现有的答案都是关于从上次提交中删除不需要的文件。

如果您想从旧提交(甚至推送)中删除不需要的文件,并且不想创建新提交,这是不必要的,因为执行以下操作:

使用查找您希望文件符合的提交;

git-log--图形--装饰--单行

使用签出提交

git checkout<commit_id><path_to_file>

如果要删除许多文件,可以多次执行此操作。

3.

gitcommit-am“删除不需要的文件”

4.

查找错误添加文件的提交的commit_id,让我们在这里说“35c23c2”

git rebase 35c23c2~1-i//注意:“~1”是必需的

此命令根据您的设置打开编辑器。默认值为vim。如果要更改全局git编辑器,请使用;

git-config--全局core.editor<editor_name>

5.

将最后一次提交(应该是“删除不需要的文件”)移动到错误提交的下一行(在我们的例子中是“35c23c2”),并将命令设置为fixup:

pick 35c23c2 the first commit
fixup 0d78b28 remove unwanted files

保存文件后你应该很好。

6.

要完成:

git push-f

如果不幸发生冲突,则必须手动解决。

我认为这里的其他答案是错误的,因为这是一个将错误提交的文件从上一次提交移回临时区域的问题,而不取消对它们所做的更改。这可以像Pariosh Singh建议的那样:

git reset --soft HEAD^ 

or

git reset --soft HEAD~1

然后重置不需要的文件,以便将它们从提交中删除(旧方法):

git reset HEAD path/to/unwanted_file

注意,自从Git 2.23.0以来,人们可以(以新的方式):

git restore --staged path/to/unwanted_file

现在再次提交,您甚至可以重复使用相同的提交消息:

git commit -c ORIG_HEAD