Git 从上次提交中删除文件

Git 从上次提交中删除文件,git,Git,如何从上次提交中删除文件,但保留所有其他内容?请注意,我还没有将任何内容推送到远程存储库,所以我只需在本地执行此操作 我的工作流程: 编辑一些文件 意外地创建了一个名为untitled.txt的新文件 承诺一切 注意不需要的untitled.txt文件 删除它 从此幸福地生活 提前谢谢 在上一次提交中,您可以轻松地更改任何您喜欢的内容(消息、文件等) 所以你可以这样做: git rm untitled.txt git commit --amend 在上一次提交中,您可以轻松地更改任何您喜

如何从上次提交中删除文件,但保留所有其他内容?请注意,我还没有将任何内容推送到远程存储库,所以我只需在本地执行此操作

我的工作流程:

  • 编辑一些文件
  • 意外地创建了一个名为
    untitled.txt的新文件
  • 承诺一切
  • 注意不需要的
    untitled.txt
    文件
  • 删除它
  • 从此幸福地生活

提前谢谢

在上一次提交中,您可以轻松地更改任何您喜欢的内容(消息、文件等)

所以你可以这样做:

git rm untitled.txt
git commit --amend

在上一次提交中,您可以轻松地更改任何您喜欢的内容(消息、文件等)

所以你可以这样做:

git rm untitled.txt
git commit --amend

为什么不在下一次提交时删除该文件?编辑提交历史记录通常被认为是一种不好的做法,在后续提交中删除该文件并不丢脸

git rm untitled.txt
git commit -m "Woopsy"

为什么不在下一次提交时删除该文件?编辑提交历史记录通常被认为是一种不好的做法,在后续提交中删除该文件并不丢脸

git rm untitled.txt
git commit -m "Woopsy"

如果您不仅希望从上次提交中删除文件,而且希望完全删除文件,那么其他答案也可以

但是,如果文件的创建不是偶然的,只是将该文件添加到提交中,该怎么办

如果只想从上次提交中删除该文件,但将该文件保留在工作副本中,以便
git将其添加到另一次提交中,则可以将
--cached
添加到
rm
命令中:

git rm --cached wanted-for-another-commit-but-not-this-one.txt
git commit -a --amend
现在验证是否已从提交中删除:

git show -p   # no more diff between /dev/null and the file!
确认它仍然存在:

ls -l wanted-for-another-commit-but-not-this-one.txt
验证它是否在未跟踪文件列表中,是否符合git add的资格:

git status

基本上,我们所做的是从暂存文件的索引中删除文件,同时保留工作副本。gitcommit-a--amend
命令不仅知道工作副本中的更改,还知道索引中的更改。它会注意到从索引中删除了文件,并将更改传播到新重写的提交。

如果您不仅要从上次提交中删除文件,而且要完全删除文件,则其他答案也可以

但是,如果文件的创建不是偶然的,只是将该文件添加到提交中,该怎么办

如果只想从上次提交中删除该文件,但将该文件保留在工作副本中,以便
git将其添加到另一次提交中,则可以将
--cached
添加到
rm
命令中:

git rm --cached wanted-for-another-commit-but-not-this-one.txt
git commit -a --amend
现在验证是否已从提交中删除:

git show -p   # no more diff between /dev/null and the file!
确认它仍然存在:

ls -l wanted-for-another-commit-but-not-this-one.txt
验证它是否在未跟踪文件列表中,是否符合git add的资格:

git status

基本上,我们所做的是从暂存文件的索引中删除文件,同时保留工作副本。gitcommit-a--amend
命令不仅知道工作副本中的更改,还知道索引中的更改。它注意到从索引中移除并传播到新改写的提交。

这是一个解决方案,但是它会在存储库的历史中留下垃圾。我很难考虑错误垃圾。我想我只是想拥有一份项目真实历史的原始副本。@Ben我想说编码错误不是垃圾,但git中的错误是“元错误”,不是项目“真实历史”的一部分?只有我的两分钱。我想像git这样的DVCS的一个大优势是你可以推敲“未发布”的部分在向公众宣传之前,先在当地宣传历史,让它看起来好看。我不认为编辑提交历史是一个坏的做法,只要历史仍然是本地的,如果垃圾太大,不能推到GITHUB,或者它包含密码——这是两个很好的修改理由。这是一个解决方案,但是它会在存储库的历史上留下垃圾。我很难考虑错误垃圾。我想我只是想拥有一份项目真实历史的原始副本。@Ben我想说编码错误不是垃圾,但git中的错误是“元错误”,不是项目“真实历史”的一部分?只有我的两分钱。我想像git这样的DVCS的一个大优势是你可以推敲“未发布”的部分在向公众宣传之前,先在当地宣传历史,让它看起来好看。我不认为编辑提交历史记录是一种不好的做法,只要历史记录仍然是本地的。如果垃圾太大,无法推送到Github,或者它包含密码——这是两个需要修改的好理由。您能详细解释一下吗?我是否可以将untitled.txt添加到上次提交时删除的文件中,这样它就会自动取消?该命令不适用于添加已删除的文件。非常感谢!到目前为止,我还不知道一个命令
rm
。你能详细解释一下吗?我是否可以将untitled.txt添加到上次提交时删除的文件中,这样它就会自动取消?该命令不适用于添加已删除的文件。非常感谢!直到现在我才知道有一个命令
rm