繁体   English   中英

为什么 git 结帐行为不一致?

[英]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 的手册页

更新工作树中的文件以匹配索引或指定树中的版本。 如果没有给出路径,git checkout 也会更新 HEAD 将指定的分支设置为当前分支。

当 <paths> 或 --patch 给出时,git checkout 不会切换分支。 它从索引文件或命名的 <tree-ish> (通常是提交)更新工作树中的命名路径。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM