在我的存储库中,我abc_想使用以下命令放弃一些更改(假设所有已编辑文件的路径均以开头):
git checkout -- abc_*
Run Code Online (Sandbox Code Playgroud)
但是,我打了一个错字,我只用了一个而不是两个破折号:
git checkout - abc_*
Run Code Online (Sandbox Code Playgroud)
看起来该命令没有放弃更改,而是添加了更多要提交的更改-实际上,它添加了几百个文件的名称以其开头abc_(但并非项目中的所有文件都以此类推)。
我的问题是:我刚刚做了什么?或者,更准确地说:破折号代表什么?
我能找到的所有答案都解释了两个破折号(-)的作用,但我理解这一点。我也相信我理解git checkout分支/树形参数或文件路径的工作原理。我找不到有关单破折号含义的任何信息,但是-破折号也用于指定参数(例如git checkout -b ...),这使搜索此命令成为问题。
此处的单破折号表示先前的活动分支或分离的HEAD。
情况1:
git checkout master
git checkout dev
# here - means master
git checkout -
# here - means dev
git checkout -
Run Code Online (Sandbox Code Playgroud)
情况2:
# detached HEAD
git checkout refs/heads/master
# back to master
git checkout master
# detached HEAD again
git checkout -
# master again
git checkout -
Run Code Online (Sandbox Code Playgroud)
因此,git checkout - abc_*意味着通过替换为先前活动分支或分离的HEAD中的内容来覆盖工作树中的路径(abc_ *)。查看git checkout
正如其他人已经回答的那样,git checkout -检查最后一个分支。检查发行说明:
@{-1}是一种引用您所在的最后一个分支的方法。
这不仅在需要对象名称的地方被接受,而且在需要分支名称的任何地方都被接受,并且就像您键入分支名称一样。例如“git branch --track 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'
Run Code Online (Sandbox Code Playgroud)
现在让我们创建另一个分支,branch_1并修改“test”文件:
$ (master) git checkout branch_1
$ (branch_1) echo 'Hello from branch_1' > test
$ (branch_1) git commit -am 'Hello from branch_1'
Run Code Online (Sandbox Code Playgroud)
如果你现在运行git checkout -,你将回到 master :
$ (branch_1) git checkout -
$ (master)
Run Code Online (Sandbox Code Playgroud)
最后,运行git checkout - test将从分支中检出测试文件branch_1:
$ (master) git checkout - test
Updated 1 path from e2bcb78
$ git diff --cached
@@ -1 +1 @@
-Hello from master
+Hello from branch_1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
256 次 |
| 最近记录: |