我使用命令错误地将文件添加到 Git :
git add myfile.txt
我还没有执行 git 承诺 。 我如何撤销此操作, 使这些更改不被包含在承诺中 ?
我使用命令错误地将文件添加到 Git :
git add myfile.txt
我还没有执行 git 承诺 。 我如何撤销此操作, 使这些更改不被包含在承诺中 ?
当前回答
问题未明确提出。 原因是Git添加有两个含义:
将新文件添加到中转区, 然后用 git rm -- checked 文件撤消。 向中转区添加一个修改过的文件, 然后用 git 重置 HEAD 文件撤消 。
如果有疑问,使用
git reset HEAD file
因为它在两种情况下都做了预期的事
警告: 如果您在已修改的文件上做了 git rm -- checked 文件( 之前在仓库中存在过的文件) , 文件将会在 git 承诺时被删除 ! 它将仍然存在于您的文件系统中, 但是如果有其他人拉动您的执行, 文件将会被从工作树上删除 。
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 添加, 请使用 :
git reset filename
根据许多其他答案, 您可以使用 Git 重置
不过:
我找到了这个大小文章, 实际添加了 Git 命令(别名) , 用于 git unadd : 详情请见 git unadd 或 。
简而言之
git config --global alias.unadd "reset HEAD"
现在你可以
git unadd foo.txt bar.txt
或/直接:
git reset HEAD foo.txt bar.txt
git rm --cached . -r
将“ un- add- add” 添加您从当前目录中添加的所有内容递归到当前目录
要澄清: git 添加从当前工作目录向中转区域( index) 移动到中转区域( index) 的移动 。
这个过程叫做中转。 因此,最自然的指令是 进行修改( 更改过的文件) 。 显而易见的是 :
git stage
git 添加只是 Git 阶段的一种更容易到类型化的别名
可惜没有非舞台或不添加命令。 相关命令更难猜测或记住, 但显而易见:
git reset HEAD --
我们可以很容易地为此创建别名:
git config --global alias.unadd 'reset HEAD --'
git config --global alias.unstage 'reset HEAD --'
最后,我们有了新的命令:
git add file1
git stage file2
git unadd file2
git unstage file1
我个人甚至使用更短的化名:
git a # For staging
git u # For unstaging
如上文所述,从中转区删除新文件(仅在出现新文件的情况下):
git rm --cached FILE
使用 rm -- -- 刻录仅用于新文件不小心添加 。