廖雪峰的官方網(wǎng)站:http://www.liaoxuefeng.com/
本文是學(xué)習(xí)廖雪峰的官方網(wǎng)站上git教程git基本用法的總結(jié)砾跃,詳細(xì)內(nèi)容可以進(jìn)入廖雪峰的官方網(wǎng)站查看状囱。
注:本文中的主要內(nèi)容都是基于Linux環(huán)境進(jìn)行操作的,使用的git版本為最新的2.10.2版本。文中命令示例中方括號里面的內(nèi)容都表示是可選參數(shù)。
1. git與版本控制系統(tǒng)
git:分布式版本控制系統(tǒng)。
svn:集中式版本控制系統(tǒng)碍遍。
無論是分布式還是集中式版本控制系統(tǒng),都只能對純文本文件進(jìn)行版本控制阳液,而對二進(jìn)制文件(如MS Word怕敬、MS Excel文檔等)卻都是無能為力的。
注意一點:文本文件必須統(tǒng)一使用utf-8格式編碼帘皿,千萬不要使用gbk編碼东跪!
2. 安裝git
1. Linux環(huán)境(以Ubuntu為例)
(1) 查看當(dāng)前有沒有安裝git
git
(2) 安裝git
sudo apt-get install git
(3) 查看git版本
git --version
(4) 查看git幫助文檔
有兩種方法:
git
git --help
2. Windows環(huán)境
到 https://git-for-windows.github.io 上下載EXE安裝包安裝,安裝完成后會有一個git bash命令行矮烹,然后在git bash命令行中其他操作和Linux下一致越庇。
3. 配置git
1. 全局配置:
git config --global user.name "your_name"
git config --global user.email "your_email@example.com"
2. 在當(dāng)前目錄下初始化一個git版本庫
git init
創(chuàng)建成功后,在當(dāng)前目錄下使用ls -al
命令奉狈,可以看到創(chuàng)建了一個新的隱藏目錄:.git卤唉,這就是git的版本庫,注意不要手動修改其中的任何內(nèi)容仁期!
4. git工作區(qū)和暫存區(qū)桑驱、分支的關(guān)系
初始化成功一個git版本庫后,會自動創(chuàng)建一個默認(rèn)版本分支:master跛蛋,以及一個暫存區(qū)(stage)熬的。那么工作區(qū)(即用git init
命令初始化后的硬盤文件夾)、暫存區(qū)赊级、分支三者之間的關(guān)系是什么呢押框?搞清楚這一點對后面學(xué)習(xí)git的很多用法都非常重要,一圖勝千言理逊,見下圖:
5. git 常用操作
準(zhǔn)備:假如當(dāng)前目錄位于learngit文件夾橡伞,是一個空文件夾,首先在learngit目錄初始化一個git版本庫:
git init
這時發(fā)現(xiàn)在learngit文件夾下新建了一個隱藏目錄:.git晋被,然后在learngit目錄下新建一個文本文件:readme.txt兑徘,并向其中任意添加一些內(nèi)容。
1. 將readme.txt文件添加到版本庫暫存區(qū)
git add readme.txt
附:git add
的其他用法:
添加工作區(qū)的所有修改(包括新建羡洛、修改和刪除文件這三種修改):
git add -A
添加工作區(qū)中新建和修改文件的改動到暫存區(qū)挂脑,但不包括刪除文件的改動:
git add *
或git add .
添加工作區(qū)修改和刪除文件的改動到暫存區(qū),但不包括新建文件的改動:
git add -u
撤銷單個或多個文件的add操作:
git reset 文件名1 文件名2...
撤銷當(dāng)前所有add到暫存區(qū)的操作:
git reset
2. 刪除文件
git rm 文件名1 文件名2...
3. 從暫存區(qū)提交修改(包括git add
和git rm
操作)到主分支
git commit -m "create a new file readme.txt"
注:git commit
操作只會提交已經(jīng)add到暫存區(qū)的修改,而工作區(qū)還未被add進(jìn)暫存區(qū)的修改是不會被提交的崭闲。
4. 查看工作區(qū)狀態(tài)
git status
5. 查看工作區(qū)和當(dāng)前版本庫最新版本之間的差別
git diff HEAD [-- 文件名1 文件名2...]
6. 撤銷暫存區(qū)的修改(包括git add和git rm操作)
git reset HEAD [文件名1 文件名2...]
7. 查看commit操作的歷史記錄
git log [--pretty=oneline]
注:--pretty=oneline
參數(shù)是為了在一行顯示一條歷史記錄肋联。
8. HEAD的理解
HEAD其實相當(dāng)于一個指針,它指向的版本號就是當(dāng)前版本庫的最新版本镀脂。
HEAD:當(dāng)前版本
HEAD^ :上一個版本
HEAD^^ :上上個版本
......
HEAD~100:往前100個版本
HEAD的指針作用可以用如下示意圖表示:
從上圖也可以看出牺蹄,HEAD指針可以指向不同的版本,而這也正是下面要講的版本回退和切換的原理薄翅。
9. 回退到某一個版本
回退到上一個版本:
git reset --hard HEAD^
回退到某個版本:
git reset --hard 版本號
注:版本號可通過git log
命令查看沙兰,只需要寫前幾位即可,git會自動識別匹配翘魄。
10. 回到未來
假如回退到之前的某個版本后鼎天,又后悔了不想回退了,想要撤銷回退(即想要回到回退前的版本)暑竟,可以使用如下命令:
先查看commit和reset命令的所有操作歷史記錄:
git reflog
找到想要回到的未來的某個版本號斋射,回到未來:
git reset --hard 版本號