从将提交的列表中删除文件

时间:2010-08-25 09:47:40

标签: git file commit

我在git存储库中有一个已更改文件的列表。目前有一个我不想提交的文件。我可以这样做:

git commit -a

提交所有文件,然后以某种方式从当前提交中删除该文件?删除后,它仍然应该在未提交的文件列表中。

9 个答案:

答案 0 :(得分:58)

你想这样做:

git add -u
git reset HEAD path/to/file
git commit

请确保从回购的顶层执行此操作; add -u在当前目录中添加更改(递归)。

关键行告诉git将索引中的给定路径的版本(提交的暂存区域)重置为HEAD版本(当前已检出的提交)。

并提前警告其他人阅读此内容:add -u进行所有修改,但不添加未跟踪的文件。这与commit -a的作用相同。如果您还想添加未跟踪的文件,请使用add .递归添加所有内容

答案 1 :(得分:37)

git rm --cached会将其从提交集中删除(“取消添加”);这听起来像你想要的。

答案 2 :(得分:13)

如果你已经推送了你的提交。做

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

AND如果您尚未在服务器上推送更改,则可以使用

git reset --soft HEAD~1

答案 3 :(得分:5)

使用藏匿处;像这样:

git add .
git reset Files/I/Want/To/Keep
git stash --keep-index
git commit -a -m "Done!"
git stash pop

如果您意外提交文件,并想要重写您的git历史记录,请使用:

git reset HEAD~1 path/to/file
git commit -a -m "rollback"
git rebase -i HEAD~2

并压缩到两个主要提交。如果您有一组您不希望自动提交的已知文件,则可以编写一个帮助程序脚本来执行其中任何一个。

答案 4 :(得分:1)

也许您也可以使用stash临时存储修补程序文件中的修改,然后重新应用它(在结帐后返回旧版本)。这可能与其他主题相关:How would I extract a single file (or changes to a file) from a git stash?

答案 5 :(得分:0)

答案:

git reset HEAD path/to/file

答案 6 :(得分:0)

您必须将该文件重置为原始状态,然后使用--amend再次提交。使用git checkout HEAD^即可轻松完成此操作。

准备演示:

$ git init
$ date >file-a
$ date >file-b
$ git add .
$ git commit -m "Initial commit"
$ date >file-a
$ date >file-b
$ git commit -a -m "the change which should only be file-a"

之前的状态:

$ git show --stat
commit 4aa38f84e04d40a1cb40a5207ccd1a3cb3a4a317 (HEAD -> master)
Date:   Wed Feb 7 17:24:45 2018 +0100

    the change which should only be file-a

 file-a | 2 +-
 file-b | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

来了:恢复以前的版本

$ git checkout HEAD^ file-b

提交它:

$ git commit --amend file-b
[master 9ef8b8b] the change which should only be file-a
 Date: Wed Feb 7 17:24:45 2018 +0100
 1 file changed, 1 insertion(+), 1 deletion(-)

状态:

$ git show --stat
commit 9ef8b8bab224c4d117f515fc9537255941b75885 (HEAD -> master)
Date:   Wed Feb 7 17:24:45 2018 +0100

    the change which should only be file-a

 file-a | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

答案 7 :(得分:0)

大多数这些答案都是从预先提交的“暂存区”中删除文件而来的,但是我经常发现自己已经提交后就在这里寻找,并且我想从刚刚做出的提交中删除一些敏感信息。

像我一样git commit --amend的所有人中一个容易记住的技巧是:

  1. 删除意外提交的文件。
  2. git add .将删除内容添加到“登台区域”
  3. git commit --amend从上一次提交中删除文件。

您会在提交消息中注意到不需要的文件现在丢失了。万岁! (Commit SHA已更改,因此,如果您已将更改推送到遥控器,请小心。)

答案 8 :(得分:0)

如果您执行了git add操作,但尚未推送任何内容,则只需执行此操作即可将其从提交中撤消。

git reset HEAD <file>