我使用命令错误地将文件添加到 Git :
git add myfile.txt
我还没跑呢git commit
。我如何撤销这些修改,使这些修改不包含在承诺中?
我使用命令错误地将文件添加到 Git :
git add myfile.txt
我还没跑呢git commit
。我如何撤销这些修改,使这些修改不包含在承诺中?
当前回答
使用使用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)
# [...]#
进入交互式添加以取消您的添加( 这里输入的 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)
$
其他回答
正如其他人在相关问题中所指出的(见A/CN.9/WG.III/WG.II),在这里, 在这里, 在这里, 在这里, 在这里, 在这里, 和在这里现在可以了取消一个单独的文件与:
git restore --staged <file>
和取消所有文件以下列方式写成:
git restore --staged .
git restore
于2019年7月以2.23版本发布。
与--staged
旗帜, 它会恢复索引的内容( 在此询问什么 ) 。
运行时git status
与 Saged 未经发送文件一起, Git 现在建议用这个来解开 Page 文件( 而不是git reset HEAD <file>
在 v2.23 之前使用过。
缩略git reset
命令帮助您修改中转区域或中转区域以及工作树。 Git 的手工能力与您想要的完全一样,意味着有时需要取消对您所要的修改的修改git add
.
你可以通过拨打电话来做到这一点git reset HEAD <file to change>
。您有两种选择可以完全消除变化。git checkout HEAD <file(s) or path(s)>
是一种快速的方法 来消除改变你的中转区和工作树的改变。
但是要小心这个命令, 因为它会消除你工作树上的所有变化。 Git 根本不知道这些变化, 因为他们从未被执行过。 一旦你执行这个命令, 就没有办法让这些变化回来 。
您可支配的另一个命令是git reset --hard
。它同样会破坏您的工作树,任何未承诺的改变或分阶段的改变在运行后都会丢失。运行中git reset -hard HEAD
做同样的事情git checkout HEAD
。它只是不需要文件或工作路径。
您可以使用--soft
与git reset
。它将存储库重新设置为您指定和分阶段进行所有这些修改的承诺。您已经进行的任何修改都不会受到影响,工作树上的修改也不会受到影响。
最终,你可以使用--mixed
将工作树重置,不进行任何修改。这也将取消任何正在准备的修改。
撤消撤消git add
用于未承诺更改的更改 :
git reset <file>
这将将文件从当前索引( “ 即将被承诺” 列表) 中删除, 而不更改其它内容 。
取消所有文件的所有更改 :
git reset
在旧的 Git 版本中,上述命令相当于git reset HEAD <file>
和git reset HEAD
或将失效,如果HEAD
未定义(因为你尚未在仓库中做出任何承诺)或模糊(因为你创建了一个分支,称为:HEAD
这是你不该做的蠢事在Git 1.8.2中更改。,所以在现代版本的 Git 中,你可以使用上面的命令,甚至在你第一次做出承诺之前:
当您在历史中没有任何承诺时, “ 将重置” (没有选项或参数) 用于错误退出, 但它现在给了您一个空索引( 匹配不存在的重置, 您甚至没有在 ) 。
文 件:git 重设
在您启动一个新工程时, 避免这个棘手问题的方法 :
git init
.吉特让事情很难办git reset
如果你没有任何承诺,如果你没有承诺。如果你为了拥有一个承诺而创建了一个小小的初始承诺,你可以在此之后git add -A
和git reset
为了让一切都好,你想多少次就多少次
这种方法的另一个优点是,如果你以后遇到一连串的麻烦, 需要刷新你所有的文件, 这很容易: