Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“中的-(单破折号)是什么意思?”;git签出-…“;?_Git - Fatal编程技术网

“中的-(单破折号)是什么意思?”;git签出-…“;?

“中的-(单破折号)是什么意思?”;git签出-…“;?,git,Git,在我的存储库中,我有一些更改(假设所有编辑文件的路径都以abc\uuu开头),我想通过以下命令放弃这些更改: git checkout -- abc_* 但是,我输入了一个错别字,我只使用了一个破折号,而不是两个破折号: git checkout - abc_* 看起来该命令没有放弃更改,而是添加了更多要提交的更改-事实上,它添加了数百个文件,这些文件的名称以abc\uu开头(但不是项目中的所有文件!) 我的问题是: 我刚才做了什么?或者更准确地说:破折号代表什么? 我能找到的所有答案都解释

在我的存储库中,我有一些更改(假设所有编辑文件的路径都以
abc\uuu
开头),我想通过以下命令放弃这些更改:

git checkout -- abc_*
但是,我输入了一个错别字,我只使用了一个破折号,而不是两个破折号:

git checkout - abc_*
看起来该命令没有放弃更改,而是添加了更多要提交的更改-事实上,它添加了数百个文件,这些文件的名称以
abc\uu
开头(但不是项目中的所有文件!)

我的问题是: 我刚才做了什么?或者更准确地说:破折号代表什么?

我能找到的所有答案都解释了两个破折号(--)的作用,但我理解这一点。我还相信我理解了
git checkout
是如何工作的,无论是使用branch/tree-ish参数还是使用文件路径。我找不到关于单破折号含义的任何信息,但是-破折号也用于指定参数(例如,
git checkout-b…
),这使得搜索此命令成为问题。

--
是一个命令,它告诉git跟随它的参数是路径;之前的是其他内容(命令选项、远程名称、分支名称、标记名称等)


-
中的
git checkout-
是最重要的
-
“@{1}”
的别名,表示上一个当前分支的名称(上一个
git checkout
命令之前的当前分支,用于更改分支)。

此处的单破折号表示上一个活动分支或分离的头部

案例1:

git checkout master
git checkout dev

# here - means master
git checkout -

# here - means dev
git checkout -
案例2:

# detached HEAD
git checkout refs/heads/master
# back to master
git checkout master

# detached HEAD again
git checkout -

# master again
git checkout -

因此,
git checkout-abc.*
意味着通过替换上一个活动分支或分离头中的内容来覆盖工作树中的路径(abc.*)。正如其他人已经回答的那样,
git checkout-
签出最后一个分支。检查:

@{-1}
是一种引用上一个分支的方法。
这是 不仅在需要对象名的地方接受,而且在任何地方都接受 需要一个分支名称,就像键入了分支名称一样。 例如“
git分支——跟踪mybranch@{-1}
”、“
git merge@{-1}
”,以及 “
git rev parse--symbolic full name@{-1}
”将按预期工作

为了演示发生了什么,让我们尝试以下示例:

$ (master) echo 'Hello from master' > test
$ (master) git commit -am 'Hello from master'
现在,让我们创建另一个分支,
branch_1
,并修改“test”文件:

如果现在运行
git checkout-
,您将返回到master:

$ (branch_1) git checkout -
$ (master)
最后,运行
git checkout-test
将从
分支\u 1
分支签出测试文件:

$ (master) git checkout - test
Updated 1 path from e2bcb78
$ git diff --cached
@@ -1 +1 @@
-Hello from master
+Hello from branch_1

From:--表示“不再将任何参数解释为选项”。另外:“当在命令行上提供文件时,命令将提交命名文件的内容,而不记录已转移的更改。这些文件的内容也会在之前提交的基础上提交给下一次提交。我理解两个破折号的作用——这里已经有很多答案解释了。我问的是单破折号的含义(;还值得一提的是,
git checkout-
git checkout@{-1}
的缩写。因此基本上,您可以运行
git checkout@{-N}
移动到历史上的第N个分支。
$ (master) git checkout - test
Updated 1 path from e2bcb78
$ git diff --cached
@@ -1 +1 @@
-Hello from master
+Hello from branch_1