情况:我有一个Git存储库,索引中已经有文件。我修改了几个文件,打开Git,用“Git add”把这些文件添加到我的暂存区。
问:如何从暂存区删除其中一个文件,但不从索引中删除它,或撤消对文件本身的更改?
情况:我有一个Git存储库,索引中已经有文件。我修改了几个文件,打开Git,用“Git add”把这些文件添加到我的暂存区。
问:如何从暂存区删除其中一个文件,但不从索引中删除它,或撤消对文件本身的更改?
当前回答
如果您只是想删除文件更改的子集,您可以使用:
git reset -p
or
git reset -p <file_name>
这个命令基本上与git add -p相反:它只会从暂存区域删除所选的更改。我发现它在“删除”我错误添加的东西时非常有用。
其他回答
对于新版本的Git,有Git restore——staging <file>。
当我用git 2.26.2.windows做git状态时。1 .也建议用于取消分期:
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
(这篇文章显示,在早期版本git重置HEAD在这一点上是推荐的)
我强烈推荐这篇文章,解释了git恢复、git恢复和git重置之间的区别,以及git恢复的附加参数。
git rm --cached FILE
,
git rm -r --cached CVS */CVS
我的示例:
$ git status
On branch feature/wildfire/VNL-425-update-wrong-translation
Your branch and 'origin/feature/wildfire/VNL-425-update-wrong-translation' have diverged,
and have 4 and 1 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: ShopBack/Source/Date+Extension.swift
modified: ShopBack/Source/InboxData.swift
modified: ShopBack/en.lproj/Localizable.strings
你们可能注意到了
> Changes to be committed:
> (use "git reset HEAD <file>..." to unstage)
我想你可以选
Git恢复——staging <path/to/file_name>
如果您对许多跟踪文件进行了更改,但只想运行其中的一些文件,则执行
转到添加 。
并不总是有利的(或推荐的)——因为它会阶段性地跟踪所有的文件(在某些情况下,您希望仅将更改保留给自己,而不希望将它们阶段性地转移到远程存储库)。
做一堆也不理想
git add路径/to/file1路径/to/file2
如果你有很多嵌套的目录(这是大多数项目的情况)-很烦人
这就是Git GUI有帮助的时候(可能是我唯一一次使用它)。只要打开Git GUI,它就会显示阶段性和非阶段性文件部分。从要取消staging的部分中选择文件并按下
Ctrl+U (windows)
让他们退出舞台。