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

git add myfile.txt

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


当前回答

吉特拥有每一个可以想象到的行动的指令, 但是它需要广泛的知识才能把事情弄好, 并且因为它充其量是反直觉的...

你以前做过的事:

  • 更改文件并使用git add .,或git add <file>.

你想怎样:

  • 从索引中删除文件, 但保留其版本, 并保留工作副本中未承诺的更改 :

     git reset HEAD <file>
    
  • 从 HEAD 将文件重置为最后一个状态, 撤消更改并将其从索引中删除 :

     # Think `svn revert <file>` IIRC.
     git reset HEAD <file>
     git checkout <file>
    
     # If you have a `<branch>` named like `<file>`, use:
     git checkout -- <file>
    

    之所以需要这样做,是因为git reset --hard HEAD单项文件不会工作。

  • 删除删除<file>从索引和版本中创建, 保留未翻过的文件, 更改工作副本 :

     git rm --cached <file>
    
  • 删除删除<file>从工作副本和版本完全版本中产生 :

     git rm <file>
    

其他回答

在您启动一个新工程时, 避免这个棘手问题的方法 :

  • 为您的新工程创建主目录 。
  • 运行运行中git init.
  • 现在创建一个. gitignore 文件( 即使它是空的 ) 。
  • 提交您的. gitignore 文件 。

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

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

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

要重置特定文件夹( 及其子文件夹) 中的每一文件, 您可以使用以下命令 :

git reset *

如果你在初始承诺中,你不能使用git reset,只要声明“破产破产”并删除.git文件夹重新开始

也许Git已经进化了 自从你提出问题之后

$> git --version
git version 1.6.2.1

现在,你可以试试:

git reset HEAD .

这应该就是你要找的

我第一次遇到这个问题时,发现此员额从这里和从第一个答案 我学到,我应该做的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. 可能来自在这里.