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

Max*_*rai 46 git file commit

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

git commit -a
Run Code Online (Sandbox Code Playgroud)

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

Cas*_*bel 59

你想这样做:

git add -u
git reset HEAD path/to/file
git commit
Run Code Online (Sandbox Code Playgroud)

确保从回购的顶层做到这一点; add -u添加当前目录中的更改(递归).

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

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

  • 要设置任何紧张的头脑,这组命令将不会**改变你在磁盘上的实际代码文件,它只会从当前提交中取出指定的文件(这是最初的问题).大人物:) (8认同)
  • 如果您不希望将.gitignore添加到提交中,则还应该编辑.gitignore并添加路径/到/文件 (3认同)

小智 39

git rm --cached将它从提交集中删除("取消添加"它); 这听起来像你想要的.

  • 像魅力一样工作.git rm --cached <filename> (2认同)

Ash*_*wan 13

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

git checkout origin/<remote-branch> <filename>
git commit --amend
Run Code Online (Sandbox Code Playgroud)

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

git reset --soft HEAD~1
Run Code Online (Sandbox Code Playgroud)


Dou*_*oug 5

使用藏匿处; 像这样:

git add .
git reset Files/I/Want/To/Keep
git stash --keep-index
git commit -a -m "Done!"
git stash pop
Run Code Online (Sandbox Code Playgroud)

如果您不小心提交了文件,并想要重写您的git历史记录,请使用:

git reset HEAD~1 path/to/file
git commit -a -m "rollback"
git rebase -i HEAD~2
Run Code Online (Sandbox Code Playgroud)

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