在git里面,有一個(gè)叫
index的區(qū)域,你把東西加到那里叫add, 把東西再從哪里撤回來叫reset;已經(jīng)在里面的我們形容它是staged,還沒有加進(jìn)去的我們形容它是unstaged。
其實(shí)index區(qū)就是一個(gè)純粹的緩沖區(qū),也叫staging area,是正式提交之前給我們的一個(gè)緩沖,還有猶豫的余地。因?yàn)橐坏┱絚ommit提交了,你所有還沒解決的愚蠢的傻事都會公開,即使能覆蓋能撤銷,但還是掩藏不了歷史。
自己做的話無所謂其實(shí),但是如果是團(tuán)隊(duì)合作的話,每次commit都是一次公開。
其實(shí)形容的話,就相當(dāng)于老板讓你做個(gè)項(xiàng)目,你肯定不可能做了一點(diǎn)東西就跑到老板辦公室去送一趟文件,應(yīng)該會先把做好的放在桌子的上那個(gè)小文件架上。然后那個(gè)文件架就叫index。
撤銷add
# 指定文件
$ git reset HEAD file.txt
# 全部撤銷
$ git reset HEAD .
撤銷修改
# 指定文件
$ git checkout -- file.txt
# 全部撤銷
$ git checkout -- .
刪除commit
一旦commit,就不能撤銷!會永遠(yuǎn)留在歷史里面。
修改commit
一般流程如下:
$ git commit -m '首次提交'
$ git add forgotten_file
$ git commit --amend
恢復(fù)某個(gè)文件到以前版本
# 用git log得知某個(gè)版本SHA后,恢復(fù)readme.md這個(gè)文件
$ git reset <SHA> readme.md
# 切換到該版本
$ git checkout readme.md
# 把變動提交
$ git add . && git commit