如何阅读 git 摘要文档?

Hon*_*ney 8 git documentation

作为一名 iOS 工程师,我很难理解 git 文档。我查看了术语表并在线搜索,但无法\xe2\x80\x99找到我的问题的答案。

\n

示例git checkout:其文档如下:

\n
1 git checkout [-q] [-f] [-m] [<branch>]\n2 git checkout [-q] [-f] [-m] --detach [<branch>]\n3 git checkout [-q] [-f] [-m] [--detach] <commit>\n4 git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <new_branch>] [<start_point>]\n5 git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <pathspec>\xe2\x80\xa6\n6 git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] --pathspec-from-file=<file> [--pathspec-file-nul]\n7 git checkout (-p|--patch) [<tree-ish>] [--] [<pathspec>\xe2\x80\xa6\xe2\x80\x8b]\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x98\x9d\xef\xb8\x8f 我自己添加了行号

\n
    \n
  • 我数了一下,有7行。每行都是可以与该行中任意数量的选项一起使用的选项组合吗?即第一行:可以单独或组合git checkout [-q] [-f] [-m] [<branch>]使用 ,吗?但分支不会 \xe2\x80\x99 工作,因为\xe2\x80\x99t 不在该行中吗?我的意思是前三行看起来非常相似。-q-f-m-q -fgit checkout -q -b-b
  • \n
  • 第一行和第二行:为什么不能用这一行替换前两行:git checkout [-q] [-f] [-m] [--detach] <branch>
  • \n
  • 另外我认为顺序并不重要,对于第一行来说,git checkout -q -fgit checkout -f -q. 我尝试过,结果是一样的,但我还是不确定
  • \n
  • 第二行:为什么有一些选项,[]--detach括号里是 is\xe2\x80\x99t ?--detach与里面的第三行有什么不同[]
  • \n
  • 第四行:[[-b|-B|--orphan] <new_branch>]我应该怎么读?我没有任何线索
  • \n
  • 第五行:什么|意思?
  • \n
  • 第七行:()用什么?
  • \n
  • 第 7 行:什么\xe2\x80\x99s 与[--]
  • \n
\n

我知道这个问题可能看起来很广泛,但不同的语法命令需要放在一起查看

\n

Hon*_*ney 8

特别感谢查尔斯·达菲 (Charles Duffy),他解决了我的意见并帮助我将这些内容整合在一起。

\n
\n

我数了一下,有7行。每行都是选项的组合,\n可以与该行中任意数量的选项一起使用吗?

\n
\n

这是正确的。但git checkout -q -b new_branch_name有效。它只在 #4 定义下工作,而不是在 #1 定义下工作

\n
\n

第一行和第二行:为什么前两行不能替换为这一行:git checkout [-q] [-f] [-m] [--detach]

\n
\n

你是对的,它们可以被替换并且仍然具有相同的概括含义。线条的分离是因为行为的差异足以在以后有单独的长形式解释。

\n
\n

另外我认为顺序并不重要,对于第一行来说, git\ncheckout -q -f 与 git checkout -f -q 没有什么不同。我尝试过,\n结果是一样的,但我还是不确定

\n
\n

除非选项部分另有说明,否则选项之间不存在基于其出现顺序的隐含关系。

\n

\xe2\x98\x9d\xef\xb8\x8f 来自POSIX 约定

\n
\n

其余问题的答案可以在Git CodingGuidlines中找到

\n

占位符以小写形式拼写并括在尖括号中:

\n
<file>\n--sort=<key>\n--abbrev[=<n>]\n
Run Code Online (Sandbox Code Playgroud)\n

如果占位符有多个单词,则它们之间用破折号分隔:

\n
<new-branch-name>\n--template=<template-directory>\n
Run Code Online (Sandbox Code Playgroud)\n

多次出现的可能性由三个点表示:

\n
<file>...\n(One or more of <file>.)\n
Run Code Online (Sandbox Code Playgroud)\n

可选部分包含在方括号中:

\n
[<extra>]\n(Zero or one <extra>.)\n\n--exec-path[=<path>]\n(Option with an optional argument.  Note that the "=" is inside the\nbrackets.)\n\n[<patch>...]\n(Zero or more of <patch>.  Note that the dots are inside, not\noutside the brackets.)\n
Run Code Online (Sandbox Code Playgroud)\n

多个替代方案用竖线表示:

\n
[-q | --quiet]\n[--utf8 | --no-utf8]\n
Run Code Online (Sandbox Code Playgroud)\n

需要明确的是,替代方案不能组合,您可以通过-q--quiet

\n

括号用于分组:

\n
[(<rev> | <range>)...]\n(Any number of either <rev> or <range>.  Parens are needed to make\nit clear that "..." pertains to both <rev> and <range>.)\n\n[(-p <parent>)...]\n(Any number of option -p, each with one <parent> argument.)\n\ngit remote set-head <name> (-a | -d | <branch>)\n(One and only one of "-a", "-d" or "<branch>" _must_ (no square\nbrackets) be provided.)\n
Run Code Online (Sandbox Code Playgroud)\n

[(<rev> | <range>)...]the的含义...应用于 的两个参数|,就像 how5应用于32from一样(3 + 2) * 5。因此:

\n
    \n
  • rev1 rev2 rev9是可以接受的
  • \n
  • range1 range3 range4是可以接受的
  • \n
  • rev1 range1不可接受!
  • \n
\n

还有一个更人为的例子:

\n
--diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]]\nHere "=" is outside the brackets, because "--diff-filter=" is a\nvalid usage.  "*" has its own pair of brackets, because it can\n(optionally) be specified only when one or more of the letters is\nalso provided.\n
Run Code Online (Sandbox Code Playgroud)\n
\n

另请注意,从git checkout页面本身来看,如果您向下滚动(其他页面在“选项”部分的末尾放置了类似的术语表),您将看到一些元数据,可以帮助您更好地理解:

\n

<branch>

\n
\n

分店到结账;如果它引用一个分支(即,当\n前缀为“refs/heads/”时,该名称是有效的引用),则该分支\n被签出。否则,如果它引用有效的提交,您的 HEAD\n将变得“分离”,并且您不再位于任何分支上(请参阅下面的详细信息)。

\n

您可以使用 @{-N} 语法来引用使用“git checkout”操作签出的第 N 个最后分支/提交。您还可以指定 -\n,它与 @{-1} 同义。

\n

作为一种特殊情况,如果只有一个合并基,您可以使用 A...B 作为 A 和 B 的合并基\n的快捷方式。您最多可以省略 A 和 B 之一,在这种情况下,它默认为 HEAD。

\n
\n

<new_branch>

\n
\n

新分支的名称。

\n
\n

<start_point>

\n
\n

启动新分支的提交名称;有关详细信息,请参阅\ngit-branch[1]。默认为 HEAD。

\n

作为一种特殊情况,如果只有一个合并基础,您可以使用“A...B”作为 A 和 B 的合并基础的快捷方式。您最多可以省略 A 和 B 之一,在这种情况下,它默认为 HEAD。

\n
\n

<tree-ish>

\n
\n

要从中结账的树(当给出路径时)。如果未指定,\n将使用索引。

\n
\n

--

\n
\n

不要将更多参数解释为选项。

\n
\n

<pathspec>\xe2\x80\xa6

\n
\n

限制受操作影响的路径。

\n

有关更多详细信息,请参阅gitglossary[7]中的 pathspec 条目。

\n
\n
\n

另外,对于指定含义的标准文档,另请参阅POSIX 实用程序约定\n[1]:https://unix.stackexchange.com/questions/11376/what-does-double-dash-mean

\n

  • 这太有用了 (3认同)