我使用命令错误地将文件添加到 Git :

git add myfile.txt

我还没跑呢git commit。我如何撤销这些修改,使这些修改不包含在承诺中?


当前回答

如果您想要还原最后一个任务, 但仍要保留在任务中本地作出的更改, 请使用此命令 :

git reset HEAD~1 --mixed

其他回答

git rm --cached . -r

将“ un- add- add” 添加您从当前目录中添加的所有内容递归到当前目录

为了澄清:git add将当前工作目录的更改移动到中转区(索引)。

此进程被称为此进程中 中 中。因此,最自然的命令阶段更改(已修改的文件)是显而易见的:

git stage

git add是一个简单到类型化的别名git stage

可惜没有git unstagegit unadd命令。相关命令更难猜或记,但很明显:

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 add有两个含义:

  1. 添加 a新文件到集结区,然后撤消git rm --cached file.
  2. 添加 a修改后撤消区域文件,然后用git reset HEAD file.

如果有疑问,使用

git reset HEAD file

因为它在两种情况下都做了预期的事

警告 :如果有的话git rm --cached file档案中修改后(一个之前在存储库中存在的文件) , 然后文件将会在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 init.
  • 现在创建一个. gitignore 文件( 即使它是空的 ) 。
  • 提交您的. gitignore 文件 。

吉特让事情很难办git reset如果你没有任何承诺,如果你没有承诺。如果你为了拥有一个承诺而创建了一个小小的初始承诺,你可以在此之后git add -Agit reset为了让一切都好,你想多少次就多少次

这种方法的另一个优点是,如果你以后遇到一连串的麻烦, 需要刷新你所有的文件, 这很容易:

  • 检查一下初始承诺。 这将删除全部文件 。
  • 然后再次检查您最近的承诺。 这将使用您当前的行终结设置, 获取您文件的更新副本 。

在源树中,您可以通过 GUI 轻松地做到这一点。您可以检查源树命令用什么来取消文件 。

我创建了一个新的文件, 并将其添加到 Git 中。 然后我用“ 原始树 GUI” 解除了它。 这是结果 :

解除文件 [08/12/ 15 10: 43] git - c diff. mnemonicprefix= false - c c c核心. cootepath= false - creedical. helper= 源树重新设置 -q - 路径/ 到/ 文件/ files/ filename.java

源树用途reset以卸载新文件。