一把剪刀看懂git reset 和它的三個參數

 

都說git 命令難記且難懂,可是若是從立體的角度看待git與git管理的版本,那麼一切都會明朗許多。git

大多數的學習教程爲了理解git,會繪製幾個圓圈的串聯,每一個圓圈表明一個commit的版本,也就是從時間線上看git 是一串commit。大多數時候這樣的理解是足夠了,可是若是當使用git reset 命令的時候這樣的一串圓圈並不能幫助咱們理解git reset 加上--hard、--soft和--mixed這三個參數究竟會發生什麼。學習

好比git reset commit B --soft, 咱們的工做目錄是什麼樣子,stage裏面是什麼?3d

使用串聯起來的圓圈的模型會讓咱們無所適從,而許多人應該都是經過記憶這個命令產生的效果來知道這個命令以後代碼處於什麼狀態,或者是用多了也就知道了,或者是搜索一下。blog

實際上,若是咱們使用本文一開始的圖片來理解,不用搜索,不用使用不少次(大部分時候用了好屢次也會忘記),就會知道git reset 那三個參數發生了什麼。教程

使用git reset 命令的時候,頭腦裏面浮出圖片, 而後想象本身手中拿着一把剪刀,當使用git reset --mixed commit x時,就是把commit x 的紅色的線剪掉,這時候咱們就處在commit x的最下面,也就是咱們的working dir至關於咱們將要把版本x 進行add和commit的時候。圖片

若是使用的是git reset --soft commit x, 就是用剪刀剪掉了commit x的黃色的線,咱們這時候處於stage了代碼,將要把代碼commit 成x的階段。it

若是使用了git reset --hard commit x,就是用剪刀剪掉了 commit x左邊的黑色線條,這時候咱們處於commit x的前一個commit 中,好比x等於B,那麼咱們這時至關於剛剛commit了A。搜索

 

原文首發於:https://zhuanlan.zhihu.com/p/28642742im

相關文章
相關標籤/搜索