GIT版本控制系統
Git Wiki
寫ToyVM時開始使用Git,不得不佩服他的強大
下列是一些常用的指令
(其實看一下gittutorial和man page就會啦)
* HEAD在git代表的是最後一個commit。HEAD^代表查看HEAD的parent,也就是上上個commit,HEAD^^代表HEAD的parent的parent。HEAD~4代表HEAD的parent的parent的parent的parent。假如你有branch過的話,HEAD可能不只有一個parent,HEAD^2可以代表另一個parent。
1. git init
這個指令會在當前目錄下創建一個新的Git Repository,也就是產生.git目錄
2. git add
將某的檔案加入索引(index)中,有就是準備建立快照(snapshot)的檔案。注意:這只是加入索引,還沒有真正建立快照。
3. git commit
為已加入索引的檔案建立快照。此時會出現VI(或者其他文字編輯器),讓你編輯commit註解(message).
以後每次都要git add,再git commit有點麻煩,所以可以利用:`-a'這個flag,也就是git commit -a。這樣git會自懂找出本來就加過索引的檔案,然後自動git add再git commit。注意是之前已經加入索引的檔案,新增的檔案要自己用git add加入索引。
-m "MSG" :可以將commit訊息附加在後面,這樣就不用進到文字編輯器。
--amend :是用來修改前一個commit的訊息,假如你在commit的時候把訊息打錯了,可以利用git commit --amend來修改message.
4. git log
查看log檔
5. git branch
顯示目前的分支。
如果branch後面有加參數,比如說git branch experimental,這樣就會產生一個新的branch。
可以在不同branch之間,對檔案進行不同的修改。
6. git checkout
切換目前所在的branch,git checkout experimental就會跳到experimental分支
checkout,也可以用來還原檔案,或是從某個commit中提取某個檔案。
比如:
git checkout master~2 makefile
會把makefile還原到前兩個快照的狀態
git checkout -- test.c
會把目前編輯過的test.c捨棄,還原成上個快照的狀態。
-m :merge,在切換版本的時候將不同版本間的變化合併,如果失敗的話必須手動修改原始碼。
7. git merge
在切換版本的時候將不同版本間的變化合併,如果失敗的話必須手動修改原始碼。
8. git diff [commit1] [commit2]
顯示兩版本間的變化,例如:
git diff HEAD HEAD^
9. git reset [commit]
這是一個很重要的功能阿!用來捨棄快照用的,或者是還原到先前某個版本。
--soft :不會動到index和working tree(就是檔案啦),這會把你所以的變化標記成"待commit"的狀態
--mixed :重設index但是不會動到working tree,所以你必須git add再git commit建立新快照
--hard :重設index和working tree,所有的變化都會被捨棄掉。
--merge :重設index到[commit]的狀態,並且更新和當前commit與[commit]不同的檔案。和--hard的不同是:索引會被還原到[commit]的狀態,而只會把和當前commit不同的檔案還原,所以假如你後來有新增檔案的話,--merage,並不會將他刪除。
大概這些就夠用了。
寫ToyVM時開始使用Git,不得不佩服他的強大
下列是一些常用的指令
(其實看一下gittutorial和man page就會啦)
* HEAD在git代表的是最後一個commit。HEAD^代表查看HEAD的parent,也就是上上個commit,HEAD^^代表HEAD的parent的parent。HEAD~4代表HEAD的parent的parent的parent的parent。假如你有branch過的話,HEAD可能不只有一個parent,HEAD^2可以代表另一個parent。
1. git init
這個指令會在當前目錄下創建一個新的Git Repository,也就是產生.git目錄
2. git add
將某的檔案加入索引(index)中,有就是準備建立快照(snapshot)的檔案。注意:這只是加入索引,還沒有真正建立快照。
3. git commit
為已加入索引的檔案建立快照。此時會出現VI(或者其他文字編輯器),讓你編輯commit註解(message).
以後每次都要git add,再git commit有點麻煩,所以可以利用:`-a'這個flag,也就是git commit -a。這樣git會自懂找出本來就加過索引的檔案,然後自動git add再git commit。注意是之前已經加入索引的檔案,新增的檔案要自己用git add加入索引。
-m "MSG" :可以將commit訊息附加在後面,這樣就不用進到文字編輯器。
--amend :是用來修改前一個commit的訊息,假如你在commit的時候把訊息打錯了,可以利用git commit --amend來修改message.
4. git log
查看log檔
5. git branch
顯示目前的分支。
如果branch後面有加參數,比如說git branch experimental,這樣就會產生一個新的branch。
可以在不同branch之間,對檔案進行不同的修改。
6. git checkout
切換目前所在的branch,git checkout experimental就會跳到experimental分支
checkout,也可以用來還原檔案,或是從某個commit中提取某個檔案。
比如:
git checkout master~2 makefile
會把makefile還原到前兩個快照的狀態
git checkout -- test.c
會把目前編輯過的test.c捨棄,還原成上個快照的狀態。
-m :merge,在切換版本的時候將不同版本間的變化合併,如果失敗的話必須手動修改原始碼。
7. git merge
在切換版本的時候將不同版本間的變化合併,如果失敗的話必須手動修改原始碼。
8. git diff [commit1] [commit2]
顯示兩版本間的變化,例如:
git diff HEAD HEAD^
9. git reset [commit]
這是一個很重要的功能阿!用來捨棄快照用的,或者是還原到先前某個版本。
--soft :不會動到index和working tree(就是檔案啦),這會把你所以的變化標記成"待commit"的狀態
--mixed :重設index但是不會動到working tree,所以你必須git add再git commit建立新快照
--hard :重設index和working tree,所有的變化都會被捨棄掉。
--merge :重設index到[commit]的狀態,並且更新和當前commit與[commit]不同的檔案。和--hard的不同是:索引會被還原到[commit]的狀態,而只會把和當前commit不同的檔案還原,所以假如你後來有新增檔案的話,--merage,並不會將他刪除。
大概這些就夠用了。
留言