Git结帐用点

时间:2013-01-22 14:14:40

标签: git

下一个git命令之间有什么区别:

git  checkout branch
git  checkout branch .
git  checkout  .  #<-- used at the branch

为什么当我用不同的文件夹将不同的分支机构检入不同的文件夹时,我错过了一些文件 但是当我使用第二个命令时,一切正常吗?

2 个答案:

答案 0 :(得分:39)

无论是否给定路径说明符,

git checkout(1)都会做出非常不同的事情。

  1. 仅使用分支说明符git checkout branch),它会将当前工作目录切换到指定分支,保留本地更改(如果可能),否则。如果您已经在branch,它将无所事事。它只修改工作目录中HEADbranch之间不同的文件,如果其中任何一个文件有本地修改(索引与否),则会失败。
  2. 使用路径说明符,它将使用指定的内容覆盖所有匹配的文件(所有文件都匹配.):
    1. 仅使用路径说明符git checkout .),它会从索引中写入内容。它是unoes unstated本地修改。要撤消分阶段修改,请将git reset与路径说明符一起使用。
    2. 使用分支和路径说明符git checkout branch .),它会在指定的修订版中写入内容。它将修改HEAD点的位置,因此,如果branchHEAD不同,则之后会有非暂停更改。
  3. 请注意,man page区分了使用-b / - branch选项和-p / - patch选项的其他情况,但这些选项大多是上述情况的直接扩展。

答案 1 :(得分:7)

上面的解释很好,但让我用例子来解释。

git checkout可用于文件夹和分支。

假设有index.html个文件和dev文件夹。

如果我不小心更改了index.html,我想撤消该操作,我只会运行git checkout index.html。它会将我的文件恢复为原始格式。

现在让我说我在dev文件夹中做了一些更改,并希望这些更改回到dev文件夹中。如果我将使用git checkout dev并且如果有任何dev分支,那么它将检出 dev分支而不是名为dev的文件夹。

所以我宁愿跑 git checkout -- dev

现在这个裸双击表示当前分支。所以上面的命令是从git询问请给我&#39; dev&#39;当前分支的命名文件夹。

让我们谈谈你的用例。

git checkout branch此命令只会检出名为&#39; branch&#39;

的分支

git checkout branch .第二个命令将告诉git请检查.或当前文件夹名称来自名为&#39; branch&#39;

git checkout . #<-- used at the branch正如您所说,首先您切换到名为&#39; branch&#39;使用git checkout branch然后您只是在做git checkout .现在没有名为.的分支,因此它只会从当前分支下拉当前文件夹名称。