git 重置 HEAD~1
我的印象是 ~1 的意思是:从 HEAD 开始,遵循 1 链接,并将 HEAD 标签设置为新的提交节点。我正期待着
git 重置 HEAD~2
跟随 2 个链接,然后设置 HEAD 标签。但是,如果我尝试它,我会收到错误:
$ git reflog
c83bbda HEAD@{0}: reset: moving to HEAD~1
44c3540 HEAD@{1}: commit: you will be garbage soon
c83bbda HEAD@{2}: reset: moving to HEAD~1
aee7955 HEAD@{3}: commit: back to 4 lines
c83bbda HEAD@{4}: reset: moving to HEAD~1
19ec1d5 HEAD@{5}: commit: 3 lines
c83bbda HEAD@{6}: reset: moving to HEAD~1
a049538 HEAD@{7}: commit: added new line
c83bbda HEAD@{8}: commit (initial): first commit
$ git reset --hard HEAD~2
fatal: ambiguous argument 'HEAD~2': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
显然我错了,但是 git reset 的文档页面对于澄清这一点并不是很有用。那么,~1 是什么意思以及为什么我需要它?
HEAD~1
是“第一个父母HEAD
“, 尽管HEAD~2
是“第一个父母的第一个父母HEAD
,等等(所以HEAD~n
对于某些 n 来说就像HEAD
后面跟着 n^
符号,没有数字)。再次强调,所有细节都在git-rev-解析 https://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html手册页。
混合时要小心git reset
与“修订从HEAD
". git reset
一般来说,change的价值HEAD
, e.g.:
$ git checkout master # now on tip of "master" branch
$ git branch save master # copy branch tip to another label, for safekeeping
$ git reset HEAD^ # or git reset HEAD~1
moves HEAD
(and master
) 到它的第一个父级。命名该父母的另一种方式是save^
,还有一个是save~1
。不过,搬迁结束后,HEAD
现在命名该父版本,所以HEAD^
names its parent:
$ git reset HEAD^
让你后退一步,这样master
and HEAD
现在命名相同的提交save~2
名称。这很容易看到使用git rev-parse
,它告诉您某些符号名称映射到的提交 ID:
$ git rev-parse save~2 master
0f5a13497dd3da8aff8e452c8f56630f83253e79
0f5a13497dd3da8aff8e452c8f56630f83253e79
此时,您可以恢复master
到保存点:
$ git reset save
哪个移动HEAD
and master
返回到保存的修订版本,然后您可以删除save
如果您愿意,请安全地:
$ git branch -d save
请注意,您可以使用以下命令保存保存点git tag
太:分支和标签之间的唯一区别是“在分支上”时新签入的行为(标签不移动,分支移动)和签出(标签将您置于“分离的 HEAD”= 不移动) -on-a-branch 状态,分支名称使您处于“on-a-branch”状态)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)