我使用命令错误地将文件添加到 Git :
git add myfile.txt
我还没有执行 git 承诺 。 我如何撤销此操作, 使这些更改不被包含在承诺中 ?
我使用命令错误地将文件添加到 Git :
git add myfile.txt
我还没有执行 git 承诺 。 我如何撤销此操作, 使这些更改不被包含在承诺中 ?
当前回答
也许Git已经进化了 自从你提出问题之后
$> git --version
git version 1.6.2.1
现在,你可以试试:
git reset HEAD .
这应该就是你要找的
其他回答
使用 git 添加 - 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)
# [...]#
进入交互式添加以取消您的添加( 这里输入的 git 命令是“ r”( revert) , “ 1”( 列表返回显示的第一个条目) , “ return” 退出返回模式, 以及“ q” ( quit) :
$ 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 status
Git会告诉你什么是舞台,等等, 包括关于如何解除舞台的指示:
use "git reset HEAD <file>..." to unstage
我发现吉特做的相当不错 裸体我做正确的事情 在这样的情况下。
注:最近Git版本(1.8.4.x)更改了此电文:
(use "git rm --cached <file>..." to unstage)
git reset filename.txt
将会从当前索引中删除名为文件名文件名. txt 的文件( 也称为“ 存储区域 ” , 即保存“ 即将执行” 的更改 ) , 而不更改其他任何更改( 工作目录没有被覆盖 ) 。
要澄清: 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 重置命令有助于您修改中转区或中转区和工作树。 Git 的手工能力与您想要的完全一样,意味着您有时需要取消对您用 Git 添加的修改的更改 。
您可以通过调用 git 重置 HEAD < file to change > 来做到这一点。 您有两个选项可以完全清除更改。 git checkout HEAD < file (s) 或 path(s) > 是撤销您中位区域和工作树的更改的快速方法 。
但是要小心这个命令, 因为它会消除你工作树上的所有变化。 Git 根本不知道这些变化, 因为他们从未被执行过。 一旦你执行这个命令, 就没有办法让这些变化回来 。
您可支配的另一个命令是 git 重置 -- hard 。 它同样会破坏您的工作树, 任何未承诺的更改或分阶段更改在运行后都会丢失。 正在运行 git 重置 - HEAD 和 git 检查退出 HEAD 一样。 它不需要文件或工作路径 。
您可以使用 -- 软化的 git 重置。 它重新将仓库设置为您指定的所有更改, 并分阶段进行这些更改。 您已经进行的任何更改都不会受到影响, 您的工作树上的更改也不会受到影响 。
最后, 您可以使用 -- mixed 来重置工作树而不进行任何修改 。 这也可以取消任何正在准备的修改 。