我错误地使用以下命令将文件添加到Git:
git add myfile.txt
我还没有运行git commit
命令。我该如何撤销这个操作,以便这些更改不会被提交?
git add myfile.txt
# 这将把你的文件添加到待提交的列表中
与这个命令完全相反的是,
git reset HEAD myfile.txt # This will undo it.
那么,您将回到之前的状态。指定文件将再次出现在未跟踪列表(之前的状态)中。
它将使用指定文件重置您的HEAD。所以,如果您的HEAD没有该文件,它将只是简单地将其重置。
git reset HEAD~1 --mixed
我会使用git restore --staged .
或者git restore --staged <filename>
。
你也可以使用git rm --cached
,但是git rm
命令最好用于已经被跟踪的文件。
在 Git 版本 2.23 或之后,您可以使用以下命令:
git restore --staged <filename>
或者,你可以使用这个命令:
git reset HEAD <filename>
git reset
命令可以帮助你修改暂存区或者同时修改暂存区和工作树。Git 能够像你想要的那样精确地创建提交,这意味着你有时需要撤消使用 git add
添加到暂存区的更改。git reset HEAD <file to change>
来实现。你有两个选项可以完全摆脱更改。 git checkout HEAD <file(s) or path(s)>
是撤消对暂存区和工作树更改的快速方法。git reset --hard
。它同样会破坏您的工作树——任何未提交或已暂存的更改在运行后都将丢失。运行 git reset -hard HEAD
与运行 git checkout HEAD
相同。只不过它不需要指定文件或路径来工作。git reset
中使用 --soft
。它将仓库重置为您指定的提交,并将所有更改暂存。已经暂存的更改不受影响,工作树中的更改也不受影响。--mixed
来重置工作树而不暂存任何更改。这也会取消暂存任何已被暂存的更改。git reset <文件名>
就可以了。它很好地解决了问题。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
,而且该列表会不断增长...
首先创建一个名为 git_add.sh
的 bash shell 脚本
:
接着添加所有要使用 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 "一些评论"
,如果你已经在Bitbucket/Github中设置好了,那么可以执行 git push -u origin master
。
声明:我只在Linux上测试过这个脚本。
如果你有许多文件和文件夹总是保存在本地git仓库中,但是当你执行git add .
时又不想让git跟踪它们的更改,比如视频和数据文件,那么你必须学会使用.gitignore
。可以从这里学习。
.gitignore
文件来防止不应该添加的文件和目录被添加进来? - Jonathan Leffler添加新信息。我的git版本是2.32.1,现在推荐的方法是
git restore --staged <file>...
这是通过输出推荐的
git status
HEAD
或head
的答案现在可以使用@
代替HEAD
。请参见此答案(最后一节)了解为什么可以这样做。 - user456814