44

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

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

为什么当我将不同的分支与第一个分支签入不同的文件夹时,我错过了一些文件。
但是当我使用第二个命令时,一切都好吗?

4

2 回答 2

63

git checkout(1)无论是否给定路径说明符,都会做非常不同的事情。

  1. 仅使用分支说明符( git checkout branch) 它将当前工作目录切换到指定分支,如果可能,保持本地更改,否则失败。如果你已经在branch,它什么都不做。它仅修改工作目录中不同的文件,HEAD并且branch如果其中任何一个具有本地修改(索引或不索引),则失败。
  2. 使用路径说明符,它将.用指定的内容覆盖所有匹配的文件(所有文件匹配):
    1. 仅使用路径说明符( git checkout .) 它从索引写入内容。也就是说,它撤消了未分级的本地修改。要撤消分阶段的修改,请使用git reset路径说明符。
    2. 使用分支和路径说明符( git checkout branch .) 它在指定的修订版中写入内容。它不会修改 whereHEAD点,因此如果branch与 不同HEAD,之后会有未分级的更改。

请注意,手册页区分了使用 -b/--branch 选项和 -p/--patch 选项的其他情况,但这些大多是上述情况的直接扩展。

于 2013-01-22T14:30:45.680 回答
16

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

git checkout可与文件夹和分支一起使用。

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

如果我不小心更改index.html并且我想撤消该更改,我将简单地运行git checkout index.html. 它会让我的文件恢复到原来的形式。

现在假设我在 dev 文件夹中进行了一些更改,并希望将这些更改返回到 dev 文件夹中。如果我将使用git checkout dev并且如果有任何dev分支,那么它将签出该dev 分支而不是名为dev.

所以我宁愿跑 git checkout -- dev

现在这个裸双破折号代表当前分支。所以上面的命令是从 git 询问的,请给我当前分支的 'dev' 命名文件夹。

让我们谈谈您的用例。

git checkout branch此命令将简单地检查名为“branch”的分支

git checkout branch .第二个命令将告诉 git 请.从名为“branch”的分支中检出或当前文件夹名称

git checkout . #<-- used at the branch正如你所说的,你首先切换到名为“branch”的分支,git checkout branch然后你只是在做git checkout .现在没有命名的分支.,所以它只会从当前分支中下拉当前文件夹名称。

于 2017-08-13T12:07:22.500 回答