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

git add myfile.txt

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


当前回答

键入 :

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>它的工作顺利。

最后,我碰巧在我的主 Git 文件夹中 有一些子文件夹。git add .以在子文件夹中添加所有文件,然后git reset我并不想添加的少数文件 。

如今我有很多档案和子文件夹git reset单一个一个,但更简单git add .首先, 然后重置少数重/ 不受欢迎但有用的文件和文件夹 。

我找到了以下方法(没有记录)在这里在这里相对容易,我希望会有所帮助:

假设你的情况如下:

Folder/SubFolder1/file1.txt
Folder/SubFolder2/fig1.png
Folder/SubFolderX/fig.svg
Folder/SubFolder3/<manyfiles>
Folder/SubFolder4/<file1.py, file2.py, ..., file60.py, ...>

您想要添加所有文件夹和文件, 但不是fig1.png,而不是SubFolderX,而不是file60.py名单不断增长...

首先,制造/制造bash shell script并给它一个名字。你说:git_add.sh:

然后将所有路径添加到所有文件夹和文件git reset之前的git reset -- 。您可以很容易地将路径复制到脚本中git_add.sh随着您的文件列表的增长。git_add.sh看起来像这个脚本 :

#!/bin/bash

git add .
git reset -- Folder/SubFolder2/fig1.png
git reset -- Folder/SubFolderX
git reset -- Folder/SubFolder4/file60.py

#!/bin/bash很重要。 那么source git_add.sh运行它。 在那之后, 你可以做git commit -m "some comment",然后git push -u origin master如果你已经设置了比特巴基特/吉图布。

免责声明:我只在Linux测试过这个。


如果您在本地 git 仓库中保留了大量文件和文件夹, 但是您不想当您保存时跟踪更改git add .说视频和数据文件您必须学会如何使用.gitignore. 可能来自在这里.

问题未明确提出,原因是: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 reset filename.txt  

将会从当前索引“ 即将被执行” 区域中删除一个名为文件名. txt 的文件, 而不更改其它内容 。

git rm --cached . -r

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

git reset filename.txt

将删除命名的文件filename.txt从当前索引(也称为“存储区域”,即“即将实施”的改动”被保存的地方)中取出,不作任何其他改动(工作目录没有被覆盖)。