git reset --soft
git reset --mixed 也就是 git reset
git reset --hard
首先我們要分成三個部分說明
當我們新增了一個 hello.txt 檔 到 working directory之後,
我們希望將該file commit 進 git directory,
首先我們必須下指令 git add hello.txt , 將我們希望更改的檔案放進 staging area,
接著再下指令 git commit -m "add hello" ("add hello" 為 commit的文字描述),
然後資料就會進到git directory了。
太好了所有的修改都加進了git directory 我可以收工了。
可惜.... 事與願違,當初做 add hello 這個修改時,我除了修改了這個檔案 hello.txt之外,我還修改了world.txt這個檔案。
糟了,我commit出了差錯老闆知道的話一定會把我臭罵一頓。
還好git 有支援倒回的指令,
我們只需要下指令 git reset --soft HEAD^ 就會將這次的commit 取消,
然後我們只需要再下 git add world.txt -> git commit -m "add hello" ,這樣就神不知鬼不覺的將資料加進這次commit了。
當然我們也可以下指令 git reset --HEAD^ ,直接取消掉 commit 以及 staging area , 回到 working directory ,這個階段所有的資料都尚未被加入 staging area,
然後接著下指令 git add hello.txt -> git add world.txt -> git commit -m "add hello"
就好了。
然後值得注意的是 git reset HEAD^ 與 git reset --hard HEAD^ 的差別在於
git reset --hard HEAD^ 會將該次的修改也一併倒回,也就是當我下了這個指令之後
hello.txt and world.txt將回到上一次commit 的版本 (這次所做的所有修改也都會消失)
除非你知道正在做甚麼,
否則不要輕易下這個指令,不然辛苦修改的成果可能就在瞬間被銷毀。
git reset 也可以用於 fast forward 只需要知道想要fast forward的SHA
使用 git reset --hard xxxxxx xxxxxx 為 head的SHA
這樣就會使分支跳到指定的位置
沒有留言:
張貼留言