git reset filename.txt
将从当前索引“即将被提交”区域中删除名为filename.txt的文件,而不更改任何其他内容。
我很惊讶没有人提到交互模式:
git add -i
选择选项3以取消添加文件。在我的情况下,我经常想要添加多个文件,使用交互模式,您可以使用这样的数字来添加文件。这将采取除4:1,2,3,5之外的所有
要选择一个序列,只需输入1-5即可从1到5。
Git临时文件
使用 * 命令一次处理多个文件
*
git reset HEAD *.prj git reset HEAD *.bmp git reset HEAD *gdb*
等等
使用 git add -i 从即将到来的提交中删除刚刚添加的文件。例:
添加您不想要的文件:
$ git add foo $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: foo # # Untracked files: # (use "git add <file>..." to include in what will be committed) # [...]#
进入交互式添加以撤消你的添加(在这里输入的命令是“r”(恢复),“1”(列表恢复中的第一个条目显示),“返回”退出恢复模式,以及“q” (放弃):
$ git add -i staged unstaged path 1: +1/-0 nothing foo *** Commands *** 1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked 5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp What now> r staged unstaged path 1: +1/-0 nothing [f]oo Revert>> 1 staged unstaged path * 1: +1/-0 nothing [f]oo Revert>> note: foo is untracked now. reverted one path *** Commands *** 1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked 5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp What now> q Bye. $
而已!这是你的证明,显示“foo”回到未跟踪列表:
$ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # [...] # foo nothing added to commit but untracked files present (use "git add" to track) $
你要:
git rm --cached <added_file_to_undo>
推理:
当我刚接触这个时,我首先尝试过
git reset .
(撤消我的整个初始添加),只是为了得到这个(不那么)有用的消息:
fatal: Failed to resolve 'HEAD' as a valid ref.
事实证明这是因为HEAD ref(branch?)直到第一次提交之后才存在。也就是说,如果你的工作流程像我一样,你会遇到和我一样的初学者问题:
git init
git add .
git status
......很多废话卷轴......
=&GT;该死的,我不想添加所有这些。
谷歌“撤消git添加”
=&GT;找到Stack Overflow - yay
=&GT;致命:无法将“HEAD”解析为有效的参考号。
它进一步证明了存在 记录了一个错误 反对邮件列表中的这个无益。
并且正确的解决方案就在Git状态输出中(是的,我把它作为'废话'掩盖了)
... # Changes to be committed: # (use "git rm --cached <file>..." to unstage) ...
而解决方案确实是使用 git rm --cached FILE 。
git rm --cached FILE
请注意这里其他地方的警告 - git rm 删除文件的本地工作副本,但是 不 如果你使用 的 --cached 强> 。这是结果 git help rm :
git rm
git help rm
--cached 使用此选项仅从索引中取消暂存和删除路径。 将保留工作树文件,无论是否已修改。
我继续使用
git rm --cached .
删除所有内容并重新开始。虽然没有工作,因为虽然 add . 结果是递归的 rm 需求 -r 递减。叹。
add .
rm
-r
git rm -r --cached .
好的,现在我回到了我开始的地方。下次我要去使用 -n 做一个干运行,看看会添加什么:
-n
git add -n .
在信任之前,我把所有东西都拉到了一个安全的地方 git help rm 有关 --cached 没有破坏任何东西(如果我拼错了它会怎么样)。
--cached
此命令将取消暂停您的更改:
git reset HEAD filename.txt
你也可以使用
git add -p
添加部分文件。
要撤消git add use
git reset filename
如果您正在进行初始提交而无法使用 git reset ,只是声明“Git破产”并删除 .git 文件夹并重新开始
git reset
.git
的 对于特定文件: 强>
git reset my_file.txt git checkout my_file.txt
的 对于所有添加的文件: 强>
git重置。 git checkout。
注意: 的 查看 强> 更改文件中的代码并移至上次更新(已提交)状态。 的 重启 强> 不改变代码;它只是重置标题。
git add myfile.txt #这将把你的文件添加到提交列表中
git add myfile.txt
与此命令完全相反的是,
git reset HEAD myfile.txt # this will undo it.
所以,你将处于以前的状态。指定将再次处于未跟踪列表(先前状态)。
它将使用指定的文件重置您的头部。所以,如果你的头没有它的意思,它只会重置它
问题没有明确提出。原因是 git add 有两个含义:
git add
git rm --cached file
git reset HEAD file
的 如果有疑问,请使用 强>
因为它在两种情况下都做了预期的事情。
的 警告: 强> 如果你这样做 git rm --cached file 在一个文件上 的 改性 强> (以前存储在存储库中的文件),然后将删除该文件 git commit !它仍然存在于您的文件系统中,但如果有其他人提取您的提交,该文件将从其工作树中删除。
git commit
git status 会告诉你文件是否是 的 新文件 强> 要么 的 改性 强> :
On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: my_new_file.txt modified: my_modified_file.txt
要重置特定文件夹(及其子文件夹)中的每个文件,可以使用以下命令:
git reset *
假设我创建了一个新文件 newFile.txt 。
newFile.txt
假设我意外地添加了文件, git add newFile.txt
git add newFile.txt
现在我要在提交之前撤消此添加 git reset newFile.txt
git reset newFile.txt
只需输入 git reset 它会恢复原状,就像你从未输入过一样 git add . 自上次提交以来。确保你以前犯过。
最直观的解决方案之一就是使用 SourceTree 。
您只需从暂存和未暂存中拖放文件即可
在SourceTree中,您可以通过gui轻松完成此操作。 您可以检查sourcetree用于取消暂存文件的命令。
我创建了一个新文件并将其添加到git中。然后我使用SourceTree gui取消了它。 这是结果:
取消暂存文件[08/12/15 10:43] git -c diff.mnemonicprefix = false -c core.quotepath = false -c credential.helper = sourcetree reset -q - path / to / file / filename.java
SourceTree使用 reset 取消暂存新文件。
reset
git rm --cached . -r
将以递归方式“取消添加”您从当前目录添加的所有内容