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

git add myfile.txt

我还没有执行 git 承诺 。 我如何撤销此操作, 使这些更改不被包含在承诺中 ?


当前回答

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

你以前做过的事:

更改文件并使用 git 添加. , 或 git 添加 < file > 。

你想怎样:

删除索引中的文件, 但保留其版本, 并保留工作副本中未承诺的更改 : git 重置 HEAD < file > 将文件重置为 HEAD 最后一个状态, 撤销更改并将其从索引中删除 : # 思考 ` svn return < file\\ IIRC. git 重置 HEAD < file> git checkout < file > # 如果您有一个像 {file} 这样的\\ 一样的\\ branch}, 使用: git checkout - < file > 这是需要的, 因为 git 重置 -- hard HEAD 将不与单个文件一起工作 。 从索引和版本中删除 < file > , 保留未翻过的文件, 工作副本中的更改 : git rm -cacheed < file > 将 < file > 从工作副本和版本中完全删除: git rm < file > 。

其他回答

撤消一个已经添加的文件很容易使用 Git 。 对于重设已经添加的 my file. txt , 请使用 :

git reset HEAD myfile.txt

解释:

进行不想要的文件后,要撤消,您可以进行 git 重置。头是本地文件的头,而最后一个参数是文件的名称。

我为你们创建了以下图像中的步骤, 更详细地介绍了这些步骤, 包括在这些情况下可能发生的所有步骤:

使用 * 命令来一次处理多个文件 :

git reset HEAD *.prj
git reset HEAD *.bmp
git reset HEAD *gdb*

根据许多其他答案, 您可以使用 Git 重置

不过:

我找到了这个大小文章, 实际添加了 Git 命令(别名) , 用于 git unadd : 详情请见 git unadd 或 。

简而言之

git config --global alias.unadd "reset HEAD"

现在你可以

git unadd foo.txt bar.txt

或/直接:

git reset HEAD foo.txt bar.txt

只要键入 git 重置, 它就会返回, 并且它就像您自上次承诺以来从未键入过 git 添加 。 请确认您以前已经承诺过 。

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

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

Git 使得您在没有任何承诺的情况下很难重置 git 重置 。 如果您创建了一个小小的初始承诺, 仅是为了创建一个, 之后您可以按您想要的重置- A 和 git 重置多少次, 以便纠正一切 。

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

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