![](/img/trans.png)
[英]Why does git checkout file behave like reset staged file followed by checkout unstaged file?
[英]Why does git checkout behave inconsistently?
如果我删除了工作目录的全部内容,然后尝试使用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中的“结帐”有两种含义?
它没有,但是你给它两个不同的命令:
git checkout <branch>
或者
git checkout <directory>
当您执行第二个时,git 假定默认分支(在您的情况下它似乎是“主”),当您执行第一个时,它不会结帐,因为有需要的本地更改(您清除的所有文件)在更改之前提交到该分支。
如果您想检查所有内容(并清除本地更改),您可以执行以下操作:
git checkout -f
这会强制结帐。
希望这可以帮助
恢复缺失的更快方法是执行 git 重置 --hard
git 结帐不会覆盖您在工作树中所做的更改,除非您告诉它。
如果你给它一个路径,你就是在告诉它更新那个路径上的工作树。
如果你不给它一个路径,你就是在告诉它把索引更改为指定的分支,而根本不更新工作树。 它假定所有丢失的文件都是您对工作树所做的更改,您可能希望在索引中进行这些更改然后提交。
更新工作树中的文件以匹配索引或指定树中的版本。 如果没有给出路径,git checkout 也会更新 HEAD 将指定的分支设置为当前分支。
当 <paths> 或 --patch 给出时,git checkout 不会切换分支。 它从索引文件或命名的 <tree-ish> (通常是提交)更新工作树中的命名路径。 ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.