以下筆記總結與廖雪峰的課程,感謝大佬,傳送門:www.liaoxuefeng.com
集中式 PK 分散式
- 集中式版本庫存放於中央伺服器,分散式則每個人的電腦上都有完整的版本庫
- 分散式安全性更高,因為參與者都有完整的版本庫,任何一個壞了都可以從別人那裡複製
- 集中式要求參與者必須聯網,網速慢的時候很捉急,分散式則不需要
- 分散式有個類似中央伺服器的電腦,但僅僅是用來交換大家的修改
如何安裝git?
- 用
git
檢查系統是否安裝 - 在Mac OS X上安裝Git:安裝homebrew,然後通過homebrew安裝Git,具體方法請參考homebrew的文件:http://brew.sh/
- 安裝完成後,需輸入如下命令配置賬號:
$ git config --global user.name "Your Name" $ git config --global user.email "email@example.com"
- 注意,加了--global就意味著你電腦上的所有專案都是用這個賬戶
建立版本庫repository
- 建立版本庫
$ mkdir 檔名
$ cd 檔名
$ pwd //檢視工作區
複製程式碼
- 通過
git init
初始化這個版本庫,將這個檔案目錄變成可以管理的倉庫
提交檔案到倉庫
如果在本地工作區建了一個檔案,比如通過vim 檔名
建一個檔案,如何提交到本地倉庫呢?
git add .或者檔名
.表示提交全部,檔名則只提交指定的git commit -m 日誌
如何掌握倉庫狀態?
git status
命令可以實時顯示倉庫狀態,比如:
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
複製程式碼
上面的結果告訴我們readme.txt被修改過了,但還沒有準備提交的修改。
git diff 檔名
命令可檢視具體修改了什麼
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.
複製程式碼
從上面的命令輸出看到,我們在第一行新增了一個distributed單詞。
再使用git add
和git commit -m
後,使用git status
即可檢視提交後的倉庫狀態,如果所有修改的檔案都被提交了,則可看見下方狀態:
$ git status
On branch master
nothing to commit, working tree clean
複製程式碼
如何回顧自己提交過的資訊?檢視每次提交的內容?
使用git log
命令可列印從最近到最遠的提交日誌,如果嫌提交資訊太龐雜,可加上--pretty=oneline
引數,日誌則會以行的形式展示:
$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file
複製程式碼
//最開始的一串數字是版本號
如何把某個檔案退回歷史版本?
- 使用
git reset
命令讓檔案回退版本 - 使用引數
--hard HEAD^
回退到上一個版本 HEAD
後面有幾個^
代表回退幾個版本- 也可以用
HEAD~數字
指定回退到具體版本
回退到歷史版本後怎麼再回來?
使用git reset --hard 版本號
即可回到具體版本,但是,執行回退時的視窗一定不能關閉,否則就找不到未來的版本號了。
到了某個版本,如何檢視版本內容?cat 指定檔案
即可檢視該檔案內容。
萬一手賤關閉了視窗或者電腦咋整?
git reflog
拯救你
!!!!關於工作區--暫存區--版本庫--add--commit:git diff 是隻比較比較工作區和暫存區(最後一次add)的區別,git diff --cached 是隻比較暫存區和版本庫的區別,git diff HEAD -- filename 是隻比較工作區和版本庫(最後一次commit)的區別。
如何撤銷修改?
- 情況一:只在工作區修改了,並未add及commit,可用
git checkout -- filename
指令撤銷 - 情況二:在工作區修改了,並add到了暫存區,可用
git reset HEAD <file>
把暫存區的修改撤銷掉,但是此時工作區仍然是修改了的,再使用情況一的方法即可完全撤銷修改。 - 既add又commit了,那就參考上面退回歷史版本
如何刪除檔案?
當你要刪除檔案的時候,可以採用命令:rm test.txt
這個時候(也就是說這個時候只執行了rm test.txt)有兩種情況
- 第一種情況:的確要把test.txt刪掉,那麼可以執行
git rm test.txt
git commit -m "remove test.txt"
然後檔案就被刪掉了
複製程式碼
- 第二種情況:刪錯檔案了,不應該刪test.txt,注意這時只執行了rm test.txt,還沒 有提交,所以可以執行git checkout test.txt將檔案恢復。
並不是說執行完git commit -m "remove test.txt"後還能用checkout恢復,commit之後版本庫裡的檔案也沒了,自然沒辦法用checkout恢復,而是要用其他的辦法。