如果我删除工作目录的整个内容,然后尝试使用git checkout
将其恢复。我收到了两种不同的行为,具体取决于我提供的命令行参数:
git checkout master
我只收到所有已删除文件和目录的列表,但没有任何真正签出。
但是当我这样做时:
git checkout <directory 1 in master>
git checkout <directory 2 in master>
git checkout <directory 3 in master>
git checkout <directory 4 in master>
git checkout <directory 5 in master>
git checkout <directory 6 in master>
git checkout <directory 7 in master>
只有这样,git才能恢复缺失的东西。
为什么?
为什么“结帐”在git中有两个含义?
答案 0 :(得分:6)
它没有,但是你给它两个不同的命令:
git checkout <branch>
或
git checkout <directory>
当你做第二个时,git假设默认分支(在你的情况下它看起来像是“master”),当你做第一个时,它不会结账,因为有本地更改(你消灭的所有文件) )在更改之前需要提交给该分支。
如果您想查看所有内容(并删除本地更改),您可以执行以下操作:
git checkout -f
迫使结账。
希望这有帮助
答案 1 :(得分:1)
恢复缺失的更快捷方法是执行git reset --hard
git checkout不会覆盖你在工作树中所做的更改,除非你告诉它。
如果你给它一个路径,你告诉它更新那条路径上的工作树。
如果你没有给它一个路径,你告诉它将索引更改为指定的分支而根本不更新工作树。它假定所有丢失的文件都是您对工作树所做的更改,您可能希望在索引中进行更改然后提交。
答案 2 :(得分:1)
来自manual page of git-checkout:
更新工作树中的文件以匹配索引或指定树中的版本。如果没有给出路径,git checkout也会更新HEAD以将指定的分支设置为当前分支。
当&lt; paths&gt;或者--patch给出,git checkout不切换分支。它从索引文件或命名的&lt; tree-ish&gt;更新工作树中的命名路径。 (通常是提交)。 ...