2

当我阅读尽可能多的关于如何使用 git 的资料时,我没有遇到任何文章建议您何时可以在需要时回滚。因此,例如,我在工作目录中初始化了一个 git 目录,即git init

然后我将文件添加到 git 的索引中,即git add .. 这已将所有文件添加到 git 的索引中。现在,我没有将文件提交到 git 的存储库 ie git commit,而是更改了我添加到索引中的文件之一。我意识到我犯了一个错误。我可以回滚到以前的状态还是只有在我提交文件时才有可能?我的理解是,当我运行命令时git add .,会在 git 的对象存储中创建一个或多个文件的副本。我相信对象存储中的文件是压缩的。这是否意味着我可以从对象存储中回滚?

4

4 回答 4

2

是的你可以。尝试

git checkout-index -f foo

foo从索引结帐。或通过以下方式签出所有文件

git checkout-index -fa
于 2013-01-24T00:59:44.820 回答
2

采用

git checkout -- <file>

丢弃工作目录中的更改,同时保留对索引的更改。

于 2013-01-24T01:00:34.827 回答
1

在不指定树形的情况下使用git checkout将从索引中检出。

于 2013-01-24T01:00:27.317 回答
1

我对这个问题很感兴趣,答案似乎是“是”,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
于 2013-01-24T01:08:06.593 回答