2013年11月24日 星期日

Git (一) git reset

今天要談的是git  reset的功能, git reset有分三個選項

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
這樣就會使分支跳到指定的位置

沒有留言:

張貼留言