我使用命令错误地将文件添加到 Git :
git add myfile.txt
我还没跑呢git commit
。我如何撤销这些修改,使这些修改不包含在承诺中?
我使用命令错误地将文件添加到 Git :
git add myfile.txt
我还没跑呢git commit
。我如何撤销这些修改,使这些修改不包含在承诺中?
当前回答
git rm --cached . -r
将“ un- add- add” 添加您从当前目录中添加的所有内容递归到当前目录
其他回答
问题未明确提出,原因是:git add
有两个含义:
git rm --cached file
.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 rm --cached FILE
使用 rm -- -- 刻录仅用于新文件不小心添加 。
git add myfile.txt
# 这将将您的文件添加到待发列表中
与这个命令完全相反的是,
git reset HEAD myfile.txt # This will undo it.
因此,您将处于上一个状态。指定的状态将再次出现在未跟踪的列表中(先前的状态)。
它会用指定的文件重置你的头。 所以, 如果您的头没有它意味着, 它只会重置它 。
吉特拥有每一个可以想象到的行动的指令, 但是它需要广泛的知识才能把事情弄好, 并且因为它充其量是反直觉的...
你以前做过的事:
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 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
. 可能来自在这里.