【问题标题】:Git checkout with dot带点的 Git 结帐
【发布时间】:2013-01-22 14:14:40
【问题描述】:

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

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

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

【问题讨论】:

  • 这不是“在分支机构”使用的。第一个参数只有在实际命名一个分支时才被认为是一个分支,. 没有。所以它只是路径。如果你说git checkout . --,它只会是分支,git会抱怨没有名为.的修订版。
  • 使用第一个表单,您可以将分支签出到当前工作副本中。那么“进入不同的文件夹”是什么意思?
  • 我的意思是我有例如 2 个分支。第一个将被成功检出,但第二个会丢失一些文件。但是如果我使用第二行一切都会好的

标签: git


【解决方案1】:

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

  1. 仅使用分支说明符 (git checkout branch) 会将当前工作目录切换到指定分支,尽可能保留本地更改,否则失败。如果您已经在branch 上,它根本不会做任何事情。它只修改工作目录中 HEADbranch 之间不同的文件,如果其中任何一个有本地修改(索引或未索引),则失败。
  2. 使用路径说明符,它将用指定的内容覆盖所有匹配的文件(所有文件匹配.):
    1. 仅使用 路径说明符 (git checkout .) 它从索引写入内容。也就是说,它撤消了未分级的本地修改。要撤消分阶段的修改,请使用带有路径说明符的git reset
    2. 使用分支和路径说明符 (git checkout branch .),它会在指定的修订版中写入内容。它不会修改HEAD 指向的位置,因此如果branchHEAD 不同,之后会有未分级的更改。

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

【讨论】:

  • @Pepelac:就在手册页中;谷歌在结果的第一页中找到了几个版本。你也试过了吗?
【解决方案2】:

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

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 . #&lt;-- used at the branch 正如你所说,首先你使用git checkout branch 切换到名为“branch”的分支,然后你只是在做git checkout . 现在没有名为. 的分支,所以它只会从下拉当前文件夹名称当前分支。

【讨论】:

  • "现在这个裸双破折号代表当前分支。所以上面的命令是从 git 询问请给我当前分支的 'dev' 命名文件夹。"我不认为这个说法是正确的,-- 只是意味着它的选项的结尾和后面的文本是文件路径。如果没有指定分支,这意味着,在索引中进行更改,而不是像你提到的那样从“当前分支”(“索引”和“当前分支”之间存在差异)
猜你喜欢
  • 2012-03-23
  • 2012-09-06
  • 2013-05-11
  • 2012-03-02
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 2013-09-22
  • 1970-01-01
相关资源
最近更新 更多