当我阅读有关如何使用git的许多来源时,我没有看到任何文章,它表明何时可以在需要时回滚。例如,我在我的工作目录中初始化了一个git目录,即git init
然后我将文件添加到git的索引,即git add .
。这已将所有文件添加到git的索引中。现在,不是将文件提交到git的存储库,即git commit
,而是对我添加到索引中的一个文件进行更改。我意识到我弄错了。我可以回滚到以前的状态,还是仅在我提交文件时才可以这样做?我的理解是,当我运行命令git add .
时,在git的对象库中创建一个或多个文件的副本。我相信对象存储中的文件是压缩的。这是否意味着我可以从对象存储库回滚?
答案 0 :(得分:2)
是的,你可以。尝试
git checkout-index -f foo
从结帐中结帐foo
。或者通过
git checkout-index -fa
答案 1 :(得分:2)
使用
git checkout -- <file>
在保留对索引的更改时放弃工作目录中的更改。
答案 2 :(得分:1)
在不指定树的情况下使用git checkout
将从索引结帐。
答案 3 :(得分:1)
我对这个问题很感兴趣,答案似乎是&#34;是&#34;,git add将文件的副本放在存储库中,即使没有提交,也可以回滚文件存储库,使用以下示例进行测试。
% mkdir test && cd test
% git init .
% echo "1" > test.txt
% git add test.txt
- git status shows now "added" file
% echo "2" > test.txt
- git status shows "added" and "modified" file, test.txt contains number 2
% git checkout test.txt
- git status shows only "added" again, and test.txt contains the number 1