創建版本庫
什麼是版本庫呢?版本庫又名倉庫,英文名repository,你可以簡單理解成一個目錄,這個目錄裏面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”。
創建一個版本庫非常簡單,首先,選擇一個合適的地方,創建一個空目錄:
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
第二步,通過git init
命令把這個目錄變成Git可以管理的倉庫:
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
把readme.txt 放在 /Users/learngit目錄下
第一步,用命令git add
告訴Git,把文件添加到倉庫:
$ git add readme.txt
執行上面的命令,沒有任何顯示,這就對了,Unix的哲學是“沒有消息就是好消息”,說明添加成功。
第二步,用命令git commit
告訴Git,把文件提交到倉庫:
git commit
命令,-m
後面輸入的是本次提交的說明,可以輸入任意內容,當然最好是有意義的,這樣你就能從歷史記錄裏方便地找到改動記錄。
爲什麼Git添加文件需要add
,commit
一共兩步呢?因爲commit
可以一次提交很多文件,所以你可以多次add
不同的文件,比如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
小結
現在總結一下今天學的兩點內容:
初始化一個Git倉庫,使用git init
命令。
添加文件到Git倉庫,分兩步:
- 使用命令
git add <file>
,注意,可反覆多次使用,添加多個文件; - 使用命令
git commit -m <message>
,完成。
git log
命令顯示從最近到最遠的提交日誌
版本回退
Git必須知道當前版本是哪個版本,在Git中,用HEAD
表示當前版本,也就是最新的提交1094adb...
(注意我的提交ID和你的肯定不一樣),上一個版本就是HEAD^
,上上一個版本就是HEAD^^
,當然往上100個版本寫100個^
比較容易數不過來,所以寫成HEAD~100
。
現在,我們要把當前版本append GPL
回退到上一個版本add distributed
,就可以使用git reset
命令:
$ git reset --hard HEAD^
HEAD is now at e475afc add distributed
--hard
參數有啥意義?這個後面再講,現在你先放心使用。
看看readme.txt
的內容是不是版本add distributed
:
$ cat readme.txt
Git is a distributed version control system.
Git is free software.
指定回到未來的某個版本:
$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL
版本號沒必要寫全,前幾位就可以了,Git會自動去找。當然也不能只寫前一兩位,因爲Git可能會找到多個版本號,就無法確定是哪一個了。
Git提供了一個命令git reflog
用來記錄你的每一次命令:
還記得如何丟棄工作區的修改嗎?
$ git checkout -- readme.txt
小結
又到了小結時間。
場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- 文件名稱
。
場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD <file>
,就回到了場景1,第二步按場景1操作。
場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。
Git鼓勵大量使用分支:
查看分支:git branch
創建分支:git branch <name>
切換分支:git checkout <name>
創建+切換分支:git checkout -b <name>
合併某分支到當前分支:git merge <name>
刪除分支:git branch -d <name>