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


当前回答

我将用例子向你解释。设A、B、C为3次连续提交。提交B包含一个不应提交的文件。

git log  # take A commit_id
git rebase -i "A_commit_ID" # do an interactive rebase
change commit to 'e' in rebase vim # means commit will be edited
git rm unwanted_file
git rebase --continue
git push --force-with-lease <branchName>    

其他回答

注意!如果您只想从上一次提交中删除一个文件,并将其保存在磁盘上,请阅读上面juzzlin的回答。

如果这是您最后一次提交,并且您希望从本地和远程存储库中完全删除该文件,您可以:

删除文件git-rm<file>带有修正标志的commit:gitcommit--修正

修正标志告诉git再次提交,但“合并”(不是合并两个分支的意思)这次提交与最后一次提交。

如注释中所述,在这里使用gitrm就像使用rm命令本身一样!

我认为这里的其他答案是错误的,因为这是一个将错误提交的文件从上一次提交移回临时区域的问题,而不取消对它们所做的更改。这可以像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  

如果出于任何原因(就像我的情况一样),您在重新设置上次提交的所有文件时遇到困难,如git reset--soft HEAD^,并且您的情况满足以下条件,您可以按照我下面的解释进行操作。

您试图删除的文件在上次提交之前已存在于存储库中您可以撤消自上次提交以来文件中的所有更改(HEAD~2-上次提交之前的提交)

然后,您可以撤消自上一次提交(HEAD~2)以来的所有更改,保存文件,将其暂存(git-add文件名),然后运行gitcommit--modify--no edit。这将提交“新的更改”,这实际上是将文件重新提交到上次提交之前的最后一次提交。

这是我从比特桶回购中删除文件的工作,我最初将文件推送到分支。

git checkout origin/develop <path-to-file>
git add <path-to-file>
git commit -m "Message"
git push

git reset—软HEAD~1git重置HEAD/file/to/deletegit rm—缓存/file/to/deletegitcommit--修改-m“您的消息”

重点是--修改

则可以:

git push-u原始主机