我在git存储库中有一个已更改文件的列表。目前有一个我不想提交的文件。我可以这样做:
git commit -a
提交所有文件,然后以某种方式从当前提交中删除该文件?删除后,它仍然应该在未提交的文件列表中。
答案 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
的所有人中一个容易记住的技巧是:
git add .
将删除内容添加到“登台区域” git commit --amend
从上一次提交中删除文件。您会在提交消息中注意到不需要的文件现在丢失了。万岁! (Commit SHA
已更改,因此,如果您已将更改推送到遥控器,请小心。)
答案 8 :(得分:0)
如果您执行了git add操作,但尚未推送任何内容,则只需执行此操作即可将其从提交中撤消。
git reset HEAD <file>