reset和checkout

reset和checkout的重置作用

  • HEAD当前检出记录的符号引用,就是指向正在其基础上进行工作的提交记录,总是指向当前分支上最近一次提交记录,通常情况下是指向分支名的。HEAD的内容可以通过cat .git/HEAD查看, 如果 HEAD指向的是一个引用,还可以用git symbolic-ref HEAD查看它的指向。
  • reset移动HEAD指向,即修改引用(如master)的游标
  • checkout改变HEAD的自身,即HEAD的内容ref: refs/heads/master.git/HEAD当前所处分支
    当检出一个分支时,它会修改HEAD指向新的分支引用,将暂存区填充为该分支上的最后一次提交的快照, 然后将暂存区的内容复制到工作区

reset用法:

  • git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]
  • git reset [-q] [<tree-ish>] [--] <pathspec>…​
    第一种用法会移动HEAD分支的指向,然后更据选项参数(-q参数保持安静,只报告错误)决定是否更新暂存区和工作区。
    第二种用法,带路径,--是为了避免路径和引用(提交ID)同名而冲突,这种用法不会改变HEAD的指向,更不会改变工作区,而是从<tree-ish>指定提交状态下的文件替换掉暂存区中的文件,即只会用某个指定提交的文件去更新暂存区。例如:git reset test.c相当于取消git add test.c命令添加到暂存区。

checkout的用法:

  • git checkout [<branch>]
  • git checkout [-q] [<commit>] [--] <paths>...
  • git checkout [-m] [[-b|--orphan] <new_branch>] [<start_point>]
    第一种用法git checkout branch虽然也会更改暂存区和工作区的内容,但相对比较安全,首先它在更改时会检查确保已经修改的文件被弄丢,然后checkout不会移动HEAD分支的指向,只会修改HEAD自身来指向另一个分支。
    第二种用法,带路径,<commit>是可选项,如果省略则相当于从暂存区(index)进行检出。这和上
    reset命令大不相同:reset的默认值是HEAD,而检出的默认值是暂存区。因此reset一般用于重置暂存区(除非使用–hard参数,否则不重置工作区),而检出命令主要是覆盖工作区(如果<commit>不省略,也会替换暂存区中相应的文件)。这种用法不会改变HEAD头指针,主要是用于指定版本的文件覆盖工作区中对应的文件。如果省略<commit>,会拿暂存区的文件覆盖工作区的文件,否则用指定提交中的文件覆盖暂存区和工作区中对应的文件。
    第三种用法主要是创建和切换到新的分支(<new_branch>),新的分支从<start_point>指定的提交开始创建。

下面的速查表列出了命令对树的影响。“HEAD” 一列中的 “REF” 表示该命令移动了 HEAD 指向的分支引用,而 “HEAD” 则表示只移动了 HEAD 自身。

HEADIndexWorkdirWD Safe?
Commit Level
reset --soft [commit]REFNONOYES
reset [commit]REFYESNOYES
reset --hard [commit]REFYESYESNO
checkout <commit>HEADYESYESYES
File Level
reset [commit] <paths>NOYESNOYES
checkout [commit] <paths>NOYESYESNO

HEAD文件通常是一个符号引用(symbolic reference),指向目前所在的分支。所谓符号引用,表示它是一个指向其他引用的指针。
当你在检出一个标签、提交或远程分支,让你的仓库变成 “分离 HEAD”状态时(DETACHED HEAD),
分离的HEAD就是让其指向了某个具体的提交记录而不是分支名,HEAD文件可能会包含一个git对象的SHA-1值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值