首先,本教程完全面向初學者小白,沒有接觸過版本控制的人也可以輕松學習本教程。
其次,本教程極具實用性,邊學邊練。而且本教程介紹的都是git基本命令,掌握了這些,你就可以玩轉git。
學習git之前,當然首先要了解一下git到底是干嘛用的。
Git是目前世界上最先進的分布式版本控制系統(沒有之一)。
- 什么是版本控制?
舉個例子,在你寫論文的時候,你肯定有過這種經歷,刪除一個段落,但是又怕刪了之后找不回來,于是,你點擊另存,保存了另一個文件,于是,一個禮拜之后, 你的文件夾就變成了無數個包括“編輯版”、“最終版”、“不改版”等等等等的word文件,看著這一堆文件,是不是頭都大了?
更要命的是,論文是好多人一起寫的,然后你的同學拷走了你都不知道是哪個版本的文檔,自己去修改了,一個禮拜后,他拿著修改好的文檔,回來說,我寫完了,把這個合起來吧。。。然而,你并不知道他到底改了哪些東西,而你自己改好的東西要想合并起來。。。想想都頭大。
然而,有了git這個利器,這些浪費時間的操作根本不需要你和你的同學來做,它不僅能記錄改動操作,還能記錄改動了哪里,是誰改動的,是不是很方便??
好的,廢話不多說,開始學習。
首先,你可以試著輸入git,看看系統有沒有安裝Git:
git
The program 'git' is currently not installed.
You can install it by typing:sudoapt-getinstall git
像上面的命令,有很多Linux會友好地告訴你Git沒有安裝,還會告訴你如何安裝Git。
如果你碰巧用Debian或Ubuntu Linux,通過一條sudo apt-get install git
就可以直接完成Git的安裝,非常簡單。
安裝完成后,還需要最后一步設置,在命令行輸入:
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
因為Git是分布式版本控制系統,所以,每個機器都必須自報家門:你的名字和Email地址。你也許會擔心,如果有人故意冒充別人怎么辦?這個不必擔心,首先我們相信大家都是善良無知的群眾,其次,真的有冒充的也是有辦法可查的。
注意git config命令的--global參數,用了這個參數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址。
創建版本庫
安裝好git后,我們就來創建第一個repository(倉庫),可以理解成一個目錄,這個目錄里面所有的文件都會被git管理起來,每個文件的刪除,修改都能被git跟蹤到,便于操作和追蹤歷史。
- 首先創建一個新目錄
mkdir learngit
cd learngit
然后進入這個目錄 - 建立git倉庫
git init
瞬間就建好了一個倉庫,我們可以看到,目錄文件里多了一個.git后綴的隱藏文件夾,千萬不要修改這個文件夾下的任何東西,否則目錄就被破壞了。 - 接著在目錄下新建一個文檔,learngit.txt,內容我們先這樣寫
Git is a version control system.
Git is free software.
- 然后我們使用
git add
這個命令,將文件添加到倉庫:
git add readme.txt
執行上面的命令之后,應該是沒有任何提示的,“沒有消息就是好消息”,對我們來說,這個文件已經被添加到git倉庫中了 - 接下來,我們使用
git commit
這個命令,將文件提交到倉庫中:
git commit -m "add file readme.txt"
-m
后面的文字是本次提交到倉庫中的注釋,每次提交時可以告訴大家我這次干了什么
git commit
命令成功后,會告訴你一個文件被改動,插入了兩行內容
[master (root-commit) cb926e7] wrote a readme file 1 file changed,
2 insertions(+) create mode 100644 readme.txt
是不是很簡單呢?
版本回滾
1. 修改文件
我們已經成功添加提交了一個readme.txt 的文件了,我們可以把文件內容修改成如下內容:
Git is a distributed version control system.
Git is free software.
現在,我們運行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")
git status
命令可以讓我們實時掌握倉庫當前的狀態,上面的命令告訴我們,readme.txt被修改過了,但還沒有準備提交的修改。
而且git不僅可以告訴我們修改過,還可以告訴我們修改了什么,我們需要用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.
經過確定修改了什么內容后, 我們就可以用git add
添加到倉庫中了,然后使用git status
查看當前倉庫狀態:
git告訴我們,將要提交的修改包含readme.txt,確認后,我們就可以放心的提交commit了,運行git commit -m "add distributed"
就成功提交到倉庫中了。
2.版本回退
目前為止,我們已經學會了修改文件,接下來,我們把readme.txt內容改成這樣:
Git is a distributed version control system.
Git is free software distributed under the GPL.
然后嘗試提交
git add readme.txt
git commit -m "append GPL"
可是你提交的時候突然發現,修改了一些重要文件,程序出錯了!沒關系,git為你提供了每一個版本的“快照”,每一次commit都像是一個“快照”,你可以隨時恢復它們。
我們可以用git log
查看你提交的每個版本
commit 82146a74cca8751e7de98aef842a8e11a63c89fc
Author: a12345rwaj <mtrabc@vip.qq.com>
Date: Thu Jul 7 11:25:13 2016 +0800
append GPL
commit aa4825f281d77d9dbeb963b032941c4655afa10f
Author: a12345rwaj <mtrabc@vip.qq.com>
Date: Thu Jul 7 11:24:47 2016 +0800
add distributed
commit 5e0c813a9fef584759abb1509c26465f6a54b13f
Author: a12345rwaj <mtrabc@vip.qq.com>
Date: Thu Jul 7 11:23:37 2016 +0800
wrote a readme file
現在,我們我們要把當前版本“append GPL”回退到上一個版本“add distributed”,就可以使用git reset
命令:
git reset --hard HEAD^
HEAD is now at ea34578 add distributed
現在我們再查看一下文檔中的內容,是不是已經變回上一個版本的內容了?是不是很方便呢~
現在,你發現自己犯了一個非常嚴重的錯誤,想返回剛才創建的那個版本,怎么辦呢,也非常簡單:
git reset --hard 82146a
版本號沒必要寫全,git很智能,可以自動匹配,現在再看看文檔,是不是又變回來了?
基本操作我們已經了解了,接下來就是利用github進行遠程倉庫操作,我們下一章再講。