How to remove files from git staging area?
我在本地repo中对一些文件进行了更改,然后我执行了git add -A,我认为它向临时区域添加了太多文件。如何删除临时区域中的所有文件?
完成后,我将手动执行git add"filename"。
- 希望您能找到这个:stackoverflow.com/questions/1505948/…
- git status已经确切地告诉您,如果您想取消文件的存储,该怎么做。
- @如果您想在整个目录中释放输出(如node_模块),那么michaelfoukarakis git状态就没有那么有用了。
- 在未来,你可能不想增加全部内容,而是希望对git add -p或git add --patch感到满意(它们是相同的)。这个标志允许您交互地选择要处理的文件或单个更改——然后您可以在提交中包含的工作中获得更精细的粒度。
可以使用
1
| git reset HEAD -- path/to/file |
就像git add一样,您可以按目录等递归地取消文件的存储,因此要一次取消所有内容的存储,请从存储库的根目录运行:
号
另外,为了将来参考,git status的输出将告诉您将文件从一种状态移动到另一种状态所需运行的命令。
- $ git reset HEAD -- .产生了fatal: Failed to resolve 'HEAD' as a valid ref.注意到我从未做过任何承诺;它是继git init之后的第一个git add。
- Git重置头——很好。不需要点
- 您也可以使用git reset @。
- @亚历克斯是不是比普通的埃多克斯强?
- @安东尼赫金斯(Antonyhatchkins)的@与HEAD同义。
- @亚历克斯很高兴知道
使用
。
把所有分阶段的文件都拆下来。
- 我能问一下这和git reset HEAD --有什么不同吗?或者这只是执行相同操作的一种更简洁的方法吗?
- @Pronotion Reset默认使用HEAD。你的git reset HEAD --里那些--的目的是什么?
- @安东尼哈金斯的答案应该是一个完整的句号(句号),并取自接受的答案中的例子。
- @对不起,我误解了你。git reset HEAD -- .的不同之处在于它只重置当前目录及以下的文件,而git reset重置项目中的所有文件。
- 我爱你:—)。
如果你已经提交了一堆不需要的文件,你可以解除它们的存储,并告诉Git用
--cached告诉它在不删除文件本身的情况下从临时目录和索引中删除路径,-r递归地操作目录。然后,您可以git add任何您想要跟踪的文件。
- +因为它很明显,但我还是在谷歌上搜索它!
- 是的,但是删除所有阶段性文件怎么样??
- 我想是"Git Rm——"。
- 如果不删除带有"git rm--"的文件,则会出现致命错误。
- @Alexmills我更新了我的答案,提到了rm取消所有文件的实际选项。
- 我尝试了这样一个奇特的文件:"Git RM-缓存我的/file .java",我看到文件仍然在分级区域,但是被删除了!@max当你运行这个命令时,你的文件是真的被删除了还是只是取消分级?如果你不想看到这种行为,我会回答。
- @奥威尔欣登堡感谢你指出这一点!--cached实际上是停止跟踪已经提交的文件。所以这个文件实际上并没有被删除,但Git认为是。我在回答中澄清了这一点。
你可以用
。
然后添加所需的特定文件
1
| git add [directory/]filename |
- 您可以添加-x参数,忽略的文件也将被删除。如果你把你的.gitignore搞砸了,并且在那里有一些有用的东西(比如我的例子),这是很有用的。(git scm.com/docs/git清理)
- 如果文件夹过多,git status会告诉你工作目录是干净的!git clean -df做了这项工作,谢谢。
- 注意,git clean -df将永久删除文件。在类Unix系统上,它将调用unlink(),并且您删除的文件将无法恢复。
- OP询问如何取消文件的分页。你建议他删除这些文件。我建议你在接电话之前先看一下舞台区域是什么。
- 感谢您删除我的整个未保存项目。
- 这个问题在我回答几个月后被重审了。这会使一些答案对案件无效。
- @Pavelryzhov将"In"替换为"From",并删除"Thanks"。题目和问题的想法都没有改变。你的回答回答了另一个问题。对于被问的问题,它没有添加任何与其他答案相关的内容。我建议你把你的答案写得更紧凑,更切题,或者删掉它,因为它会对一些人造成破坏。
- 好啊。缩短并清洁。
如其他答案所述,您应该使用git reset。这将撤销git add -A的行动。
注:git reset相当于git reset --mixed这样做。
Resets the index but not the working tree (i.e., the changed files are preserved but not marked for commit) and reports what has not been updated. This is the default action. [ git reset ]
号
- …要从临时区域删除单个文件,可以执行git reset filenameToNotCommit。
您可以通过以下几种方式重置临时区域:
重置head并添加所有必要的文件以再次签入,如下所示:
1 2 3 4
| git reset HEAD ---> removes all files from the staging area
git add <files, that are required to be committed>
git commit -m"<commit message>"
git push |
。
我试过所有这些方法,但都不管用。我使用rm -rf .git从本地存储库中删除了.git文件,然后再次执行git init和git add以及常规命令。它起作用了。
- 阅读Git文档通常比遵循xkcd.com/1597;的建议更有价值。)
- 也许你的具体案例中有一个完整性问题,这是剩下的选择,但不建议这样做。
- 请不要这样做,你会毁了你的整个git回购。