git reset详解

技术干货,第一时间推送

HEAD

HEAD也是很多初学者会搞不清楚的一个概念 说穿了也很简单 就是

你的目前branch的最新的commit

所以今天你下了git checkout b1

但有个例外 因为checkout并不只可以指定branch 还可以指定一个commit 所以当你checkout

他的意思是说 嘿 既然你指定的是commit 我就生一个暂时的branch给你 你现在的确在一个branch上 只是这个branch没有名字 你可以马上checkout -b 生出一个branch 也可以commit在这个没有名字的branch上面

再说一次 HEAD就是你的目前branch的最新的commit即使这个branch可能没有名字

git reset

git reset 的意思就是 把HEAD移到

这是现在repo的情况

D在stage裡面, E在working裡

我习惯想像成这样

这裡的repo是指local的 不是remote的 别忘了一个铁则 Working >= Staging >= Repo

这样具体化之后 之后的解释会简单很多

再说一次 git reset 的意思就是 把HEAD移到 就是把你现在这个branch的最新的commit移到你指定的commit

你只要知道这三种用法就可以

现在的State是S0 因为等一下会一直回到现在的state, S0的HEAD在Repo的C

SOFT

soft 就是只动repo

这样子 staging裡面就会有c和d, working 裡e一样

HEAD会跑到repo的B

MIXED/DEFAULT

状态回到S0

mixed就是动repo还有staging

这样子 staging裡面就什麽都没有, working 裡c,d,e

HEAD会跑到repo的B

HARD

状态回到S0

hard就是动repo还有staging还有working

这样子 staging裡面就什麽都没有, working 裡什麽都没有

HEAD会跑到repo的B

git reset第二种用法

第二种的用法只是第一种的一个特例 就是前面的soft/mixed/hard不能指定 使用默认的mixed

然后后面可以指定单独的file

(先不要管[--])这个用法就是你可以只针对一个file做出这个指令

至于--(double hyphen) 是避免有些人会把档案名称取的跟branch名称一样 或是你有个档案就叫做"HEAD" 你就必须用 而不是只用HEAD 但基本上你不胡搞 你是不需要用到这个的

还有一件事 如果你commit不给 default就是HEAD, 如果你file不给 default就是整个资料夹

恭喜走出十里坡

基本上git reset已经讲完了 你看到一个git reset的command你就知道执行下去会发生什麽事 但看到command知道会发生什麽事只是学git的第一步而已 你要知道什麽时候要用这个command才是高手 以下说明常遇到 需要用git reset的例子

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200224A09I2300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券