一、創建版本庫
1、安裝完成后,在開始菜單里找到“Git”->“Git Bash”,蹦出一個類似命令行窗口的東西,就說明Git安裝成功!
安裝完成后,還需要最后一步設置,在命令行輸入:
$ git config --global user.name "Your Name" $ git config --global user.email "email@example.com"
$ git config --global core.autocrlf false //windows中的換行符為 CRLF, 而在Linux下的換行符為LF,可以使用此命令禁止自動轉換
因為Git是分布式版本控制系統,所以,每個機器都必須自報家門:你的名字和Email地址。你也許會擔心,如果有人故意冒充別人怎么辦?這個不必擔心,首先我們相信大家都是善良無知的群眾,其次,真的有冒充的也是有辦法可查的。
注意git config
命令的--global
參數,用了這個參數,表示你這台機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址。
2、創建一個版本庫非常簡單,首先,選擇一個合適的地方,創建一個空目錄(為了保證不出現問題,請保證目錄名設置為英文):
$ cd d:
$ mkdir learngit $ cd learngit $ pwd /d/learngit
3、通過 git init 把這個目錄變成Git可以管理的倉庫:
$ git init Initialized empty Git repository in D:/learngit/.git/
4.瞬間Git就把倉庫建好了,而且告訴你是一個空的倉庫(empty Git repository),並且當前目錄下多了一個.git
的目錄
注意:千萬不要使用Windows自帶的記事本編輯任何文本文件。會導致UTF-8編碼的文件,出現亂碼的問題。
5、現在我們編寫一個readme.txt
文件,一定要放到learngit
目錄下(子目錄也行),內容如下:
Git is a version control system. Git is free software.
6、用命令 git add
告訴Git,把文件添加到倉庫:
git add readme.txt
執行上面的命令,沒有任何顯示,就說明添加成功。
7、用命令 git commit
告訴Git,把文件提交到倉庫:
$ git commit -m "wirte a readme file" [master (root-commit) 2ec6b08] wirte a readme file 1 file changed, 2 insertions(+) create mode 100644 readme.txt
注:-m 后面輸入的是本次提交的說明,方便找到歷史中的記錄。
總結:
git init //初始化一個Git倉庫
git add file.txt //添加文件,可以一個
git add file1.txt file2.txt //添加文件,可以多個
git commit -m "文字說明" //完成並注明文字說明
二、版本比較
1、我們已經提交過readme.txt文件了,現在我們繼續修改readme.txt文件,改成
Git is a version control system. Git is free software. Git is good!
2、運行 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")
會告訴我們哪個文件被修改過了。
3、git diff 查看差異性
$ git diff readme.txt diff --git a/readme.txt b/readme.txt index d8036c1..24c6b62 100644 --- a/readme.txt +++ b/readme.txt @@ -1,2 +1,3 @@ Git is a version control system. -Git is free software. \ No newline at end of file +Git is free software. +Git is good! \ No newline at end of file
4、git add / git commit 確認哪些文件被修改過和文件內容的差異性之后,就可以放心的向倉庫提交了。
$git add readme.txt //git add . 指提交目錄下的所有文件 $git commit -m "modified readme.txt"
5、git status 看看倉庫的當前狀態
$ git status On branch master nothing to commit, working tree clean //說明工作目錄是干凈的
三、版本回退
1、git log 查看版本的歷史記錄,即可看到修改的過的歷史記錄,及歷史說明。
$ git log commit 167fb1efb4bf77266ec663eb6d2762118ea2071a (HEAD -> master) Author: lion201314 <lion201314@vip.qq.com> Date: Thu Jul 13 22:18:23 2017 +0800 readme.txt instruction commit 8f40beccceacb2ad6b25a0df26cc52737ed09744 Author: lion201314 <lion201314@vip.qq.com> Date: Thu Jul 13 22:11:25 2017 +0800 modified readme.txt commit 2ec6b08c22375e9d3c651cd7b7eeaecb29b9f43d Author: lion201314 <lion201314@vip.qq.com> Date: Thu Jul 13 21:46:29 2017 +0800 wirte a readme file
注:參數:--pretty=oneline 可以將每條記錄只顯示一行
$ git log --pretty=oneline 167fb1efb4bf77266ec663eb6d2762118ea2071a (HEAD -> master) readme.txt instruction 8f40beccceacb2ad6b25a0df26cc52737ed09744 modified readme.txt 2ec6b08c22375e9d3c651cd7b7eeaecb29b9f43d wirte a readme file
2、使用 git reset 將版本回退到上一個版本“modified readme.txt”
$ git reset --hard HEAD^ //回退到上一個版本 HEAD is now at 8f40bec modified readme.txt
當然git也可以自定義回到固定的版本,只要append GPL
的commit id 就可以了。比如上面
的案例的commit id 就是8f40bec
$ git reset --hard 8f40bec //等同於上面的方法 HEAD is now at 8f40bec modified readme.txt
注:
HEAD指向那個版本號,當前定位就在哪里。
3、當然說明一下,你可以通過 git reflog 找到對應的commit id,終於可以不擔心commit id找不到了。
四、現在來解析一下git的工作區和暫存區
learngit 為工作區
.git 為Git的版本庫
Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支master
,以及指向master
的一個指針叫HEAD
。
五、撤銷修改和刪除文件
1、撤銷修改:git checkout -- readme.txt
$git checkout -- readme.txt
命令git checkout -- readme.txt
意思就是,把readme.txt
文件在工作區的修改全部撤銷,這里有兩種情況:
一種是readme.txt
自修改后還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
一種是readme.txt
已經添加到暫存區后,又作了修改,現在,撤銷修改就回到添加到暫存區后的狀態。
總之,就是讓這個文件回到最近一次git commit
或git add
時的狀態。
命令:git checkout -- file //沒有--就變成切換分支的命令。
小結:
場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file
。
場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file
,就回到了場景1,第二步按場景1操作。
六、刪除文件
1、添加,並提交兩個文件 test1.txt test2.txt
$ git add test1.txt test2.txt $ git commit -m "add test file"
2、現在用 rm test1.txt 刪除文件
$ rm test1.txt
3、查看狀態
$ git status On branch master Changes not staged for commit: (use "git add/rm <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) deleted: test1.txt no changes added to commit (use "git add" and/or "git commit -a")
4、
場景一:刪除錯誤的情況,需要恢復數據 git checkout -- test1.txt
場景二:正常刪除,需要刪除版本庫中信息 git rm test1.txt