Linux: Git
以下紀錄一些git command的使用方法和說明,都是參考PRO GIT文章的內容:http://progit.org/book/
我覺得這個網址的首頁中提到一個觀念可以讓使用者比較快了解Git到底在幹嘛,在Git中要記得有三個tree,分別是哪三個呢:HEAD, Index, Working Directory這三個tree。
HEAD Index Work Directioy
commit stage files(add)
<-------------------------- <--------------------------
--------------------------------------------------------------------->
checkout the project
三者個關係大概是長成這個樣子,腦中有這個印象之後,接下來對git command的說明會比較清楚當該command下達之後是行進到哪個階段。
HEAD : 照著英文翻譯就是指 "最後一次commit時候的快照",也就是紀錄最後一次commit的狀態。
Index : 放在Index Tree中的表示,即將被commit的紀錄。
Working Directory : 即是目前的工作目錄,所有的修改都是最先記錄在這個Tree上,再透過commit和add的功能將狀態分別記錄到Index和HEAD中
Command list:
-git init :
-git add :
-git status :
-git diff :
-git commit -m : 加上-a的參數表示可以在commit的時候加上commit message,這個commit message就像是寫code時的注解一樣,幫助你了解這次commit的訊息。(好比此次commit是解決的哪個bug之類)
-git commit -a -m : 這邊我們可以看到比前一個command多了-a的參數,這樣可以讓你少做一個步驟(git add <file name>),加上了-a之後他會在commit之前自動的stage每個已經tracked的檔案(也就是將這些新檔案從Work Directory映射到Index去)。
-git rm <filename>: 假設要從git中刪除README這個檔案,可以直接下git rm README來刪除。它不僅會刪除該檔案在HEAD, Index紀錄,連Working Directory的README都會被刪除。這個command和一般的刪除檔案的效果並不同,假使你使用一般的刪除檔案rm去刪除README,此時你用git status去查看訊息會發現如下:被標示成unstaged的狀態
#On branch master
#
#Change but not updated:
# (use "git add/rm <file>..." to update what will be committed)
#
# deleted : README
#
若是使用git rm去刪除,則會staged該檔案為removal。得到的結果如下:
#On branch master
#
#Change to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted : README
#
git rm完之後,下一次的git commit即會將此檔案移除而且不會再被tracked。
-git commit --amend : 用來改變或是說append最後一次的commit。當你修改完檔案後,已經git add變成stage的狀態而且接著又做了commit的動作才發現還要補一些東西在這次的commit當中,這時候就可以利用這個command來做補強的動作,示範如下:
@git add newfile.c
@git commit
這時你才發現newfile.c中還有東西要改,所以在此修改newfile.c,修改完畢後:
@git add newfile.c //這部還是要做,因為修改後還是要再add一次。
@git commit --amend //下完這個command之後會叫你再補一些commit的敘述,這時候通常是建議在補上一些東西說明,這樣就可以知道這次的commit是經過幾次的修改。
-git reset HEAD <file name> : 這個command是用來讓已經透過git add的file變成unstaging,使用方法如下的範例:
@git add . //將資料夾下的所有檔案都加入Index中(假設add . 早成device.c和driver.c都被加入Index中)
@git status //檢視目前的狀態可發現有new file (device.c and driver.c)
此時若想要將device.c標記成為unstaging則透過下面的command
@git reset HEAD device.c
結束之後用git status查看可以發現device.c被標示為unstaging
我覺得這個網址的首頁中提到一個觀念可以讓使用者比較快了解Git到底在幹嘛,在Git中要記得有三個tree,分別是哪三個呢:HEAD, Index, Working Directory這三個tree。
HEAD Index Work Directioy
commit stage files(add)
<-------------------------- <--------------------------
--------------------------------------------------------------------->
checkout the project
三者個關係大概是長成這個樣子,腦中有這個印象之後,接下來對git command的說明會比較清楚當該command下達之後是行進到哪個階段。
HEAD : 照著英文翻譯就是指 "最後一次commit時候的快照",也就是紀錄最後一次commit的狀態。
Index : 放在Index Tree中的表示,即將被commit的紀錄。
Working Directory : 即是目前的工作目錄,所有的修改都是最先記錄在這個Tree上,再透過commit和add的功能將狀態分別記錄到Index和HEAD中
Command list:
-git init :
-git add :
-git status :
-git diff :
-git commit -m : 加上-a的參數表示可以在commit的時候加上commit message,這個commit message就像是寫code時的注解一樣,幫助你了解這次commit的訊息。(好比此次commit是解決的哪個bug之類)
-git commit -a -m : 這邊我們可以看到比前一個command多了-a的參數,這樣可以讓你少做一個步驟(git add <file name>),加上了-a之後他會在commit之前自動的stage每個已經tracked的檔案(也就是將這些新檔案從Work Directory映射到Index去)。
-git rm <filename>: 假設要從git中刪除README這個檔案,可以直接下git rm README來刪除。它不僅會刪除該檔案在HEAD, Index紀錄,連Working Directory的README都會被刪除。這個command和一般的刪除檔案的效果並不同,假使你使用一般的刪除檔案rm去刪除README,此時你用git status去查看訊息會發現如下:被標示成unstaged的狀態
#On branch master
#
#Change but not updated:
# (use "git add/rm <file>..." to update what will be committed)
#
# deleted : README
#
若是使用git rm去刪除,則會staged該檔案為removal。得到的結果如下:
#On branch master
#
#Change to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted : README
#
git rm完之後,下一次的git commit即會將此檔案移除而且不會再被tracked。
-git commit --amend : 用來改變或是說append最後一次的commit。當你修改完檔案後,已經git add變成stage的狀態而且接著又做了commit的動作才發現還要補一些東西在這次的commit當中,這時候就可以利用這個command來做補強的動作,示範如下:
@git add newfile.c
@git commit
這時你才發現newfile.c中還有東西要改,所以在此修改newfile.c,修改完畢後:
@git add newfile.c //這部還是要做,因為修改後還是要再add一次。
@git commit --amend //下完這個command之後會叫你再補一些commit的敘述,這時候通常是建議在補上一些東西說明,這樣就可以知道這次的commit是經過幾次的修改。
-git reset HEAD <file name> : 這個command是用來讓已經透過git add的file變成unstaging,使用方法如下的範例:
@git add . //將資料夾下的所有檔案都加入Index中(假設add . 早成device.c和driver.c都被加入Index中)
@git status //檢視目前的狀態可發現有new file (device.c and driver.c)
此時若想要將device.c標記成為unstaging則透過下面的command
@git reset HEAD device.c
結束之後用git status查看可以發現device.c被標示為unstaging
留言
張貼留言