技术干货,第一时间推送
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的例子
领取专属 10元无门槛券
私享最新 技术干货