一、git簡介:
Linux創(chuàng)建了Linux,但是Linux的發(fā)展壯大是由世界各地的熱心志愿者參與編寫的?那么那么多份的代碼是怎么合并的呢?之前是在2002年以前,世界各地的志愿者把源代碼文件通過diff的方式發(fā)給Linus,然后由Linus本人通過手工方式合并代碼!
Git是由Linus花了兩周時(shí)間自己用C寫了一個(gè)分布式版本控制系統(tǒng) 。2008年,GitHub網(wǎng)站上線了,它為開源項(xiàng)目免費(fèi)提供Git存儲(chǔ),無數(shù)開源項(xiàng)目開始遷移至GitHub,包括jQuery,PHP,Ruby等等。歷史就是這么偶然,如果不是當(dāng)年BitMover公司威脅Linux社區(qū),可能現(xiàn)在我們就沒有免費(fèi)而超級(jí)好用的Git了。
二、集中式的版本控制系統(tǒng)和分布式版本控制系統(tǒng)的不同
集中式的版本控制系統(tǒng): 代表有CVS 、SVN
特點(diǎn): 版本庫集中存放在中央服務(wù)器 必須聯(lián)網(wǎng)才能工作 如果中央服務(wù)器的代碼被惡意修改了,所有人的代碼都可能會(huì)有問題
只能跟蹤文本文件的改動(dòng),比如txt文件,網(wǎng)頁,所有的程序代碼等
分布式版本控制系統(tǒng)的是 Git
特點(diǎn): 版本庫在自己的電腦上 不需要聯(lián)網(wǎng)也能工作 安全性高 只能跟蹤文本文件的改動(dòng),比如txt文件,網(wǎng)頁,所有的程序代碼等
強(qiáng)烈建議使用UTF-8編碼 所有語言使用同一種編碼,既沒有沖突,又被所有平臺(tái)所支持
三、 安裝Git
?在Linux上安裝Git
1. 如果碰到Ubuntu或Debian 請使用下面命令:
$ git //這條命令檢查系統(tǒng)中是否有Git
sudo apt-get install git // 如果沒有,則使用這條命令來進(jìn)行安裝Git
2. 如果碰到的是 CentOS 請使用下面命令:
$ git // 這條命令檢查系統(tǒng)中是否有Git
sudo yum install git
在Windows上安裝Git
1. 如果是32位系統(tǒng) 請使用安裝包
[32位系統(tǒng)的Git](./Other/Git-2.14.3-32-bit.exe)
2. 如果是64位系統(tǒng) 請使用安裝包
[64位系統(tǒng)的Git](./Other/Git-2.14.3-64-bit.exe)?
在Mac OS 上安裝Git
自己上Git官網(wǎng)搜索 直接下載使用
四、Git安裝好了,那么下面我們來一起使用
?版本倉庫(repository),那么說是一個(gè)文件夾更好理解
>?1. 選擇一個(gè)合適的地方,創(chuàng)建一個(gè)空目錄
#打開命令行工具,輸入命令 代表新建了一個(gè)名字為git的文件夾
mkdir git

# 進(jìn)入Git文件夾中
cd git

# 查看該文件夾的絕對(duì)位置(在windows中) **如果看到輸入的pwd中有中文 請確保你的路徑中沒有中文**
pwd

> 2. 把剛才創(chuàng)建的文件夾目錄變成git可以管理的倉庫
# 初始化倉庫
git init

# 如果你的文件夾中沒有任何內(nèi)容將會(huì)得到如下輸出結(jié)果 代表是初始化了一個(gè)空的Git倉庫
Initialized empty Git repository in F:/git/.git/
?注意: 在使用之前我們來理解一些概念? -----工作區(qū)和暫存區(qū)---
> 名詞解釋
1.工作區(qū)(Working Directory)? ? ? :? ?就是你在電腦里能看到的目錄,比如我的GitHub文件夾目錄
2.版本庫(Repository):? ? ?在工作區(qū)有一個(gè)隱藏目錄.git,這個(gè)就是Git的版本庫
3.暫存區(qū):? ? 在版本庫中存在一個(gè)成為Stage的暫存區(qū),它是專門存儲(chǔ)修改和添加的區(qū)域。一旦提交后,如果你又沒有對(duì)工作區(qū)做任何修改,那么暫存區(qū)就是干凈的
## 管理修改(需要案例證明)
為什么Git比其他版本控制系統(tǒng)設(shè)計(jì)得優(yōu)秀,因?yàn)镚it跟蹤并管理的是修改,而非文件。你會(huì)問,什么是修改?比如你新增了一行,這就是一個(gè)修改,刪除了一行,也是一個(gè)修改,更改了某些字符,也是一個(gè)修改,刪了一些又加了一些,也是一個(gè)修改,甚至創(chuàng)建一個(gè)新文件,也算一個(gè)修改。
> Git不會(huì)提交沒有放到暫存區(qū)的修改
這里我畫了一個(gè)圖方便大家理解

看了這個(gè)圖是不是理解了他的工作機(jī)制了呢?
下面繼續(xù)-------------------------------------------------
1? 現(xiàn)在我們編寫一個(gè)first.txt 文件,并把該文件提交修改到git版本庫
# 把要提交的文件添加到版本庫
git add 文件名

# 把要提交的文件提交到版本庫
git commit -m "本次提交的說明"

我們再次對(duì)文件進(jìn)行修改??
#查詢工作區(qū)和版本庫的文件狀態(tài),紅色的代表修改后的文件在工作區(qū),沒有添加到暫存區(qū)或者提交

#我們來 把剛才的修改后的文件添加和提交一下

> 2. 查看提交的日志記錄
# 查看我們提交的歷史記錄
git log 或 git log --pretty=oneline

git log --pretty=oneline 這個(gè)命令讓每次提交信息都在一行顯示 更清晰直觀? 前面一串字母和數(shù)字代表了每次提交的id號(hào),我們可以根據(jù)id 和提交信息找到對(duì)應(yīng)的文件版本,是不是很方便呢

再修改提交幾次

next 就是怎么找回以前版本-----驚喜在下面!?。。?!
> 3. 版本回退
# 把版本回退到前面的版本 當(dāng)前版本 HEAD 上一個(gè)版本HEAD^ 往上100個(gè)版本 HEAD~100
git reset --hard HEAD^
當(dāng)前版本查詢(fourth commit)

上一版本查詢(second commit)

......
> 4. 查看自己的每一次命令的記錄
# 如果回退到某一個(gè)版本之后又后悔了,那么可以再回到某一次提交,這時(shí)可以查看自己的寫過的命令
git reflog (可以看到全部的提交信息,及版本回退記錄)

這時(shí)候根據(jù)id和提交信息就可以輕松找回你需要的那個(gè)版本了
> 5. 回到某一次的提交
# 回到某一次提交就要找到某一次提交的id ,使用fit reflog可以查看自己的命令id
git reset --hard id號(hào)(比如找回第四次提交的版本)git reset --hard 第四次提交版本的id號(hào),這樣當(dāng)前版本就是第四次提交的版本啦

## 撤銷修改
> 1.當(dāng)你改亂了工作區(qū)某個(gè)文件的內(nèi)容,想直接丟棄工作區(qū)的修改時(shí)
命令: git checkout -- file
> 2.當(dāng)你不但改亂了工作區(qū)某個(gè)文件的內(nèi)容,還添加到了暫存區(qū)時(shí),想丟棄修改
1. git reset HEAD file
2. git checkout -- file
## 刪除文件
> 1.確實(shí)要?jiǎng)h除
git rm? 文件名? 把文件刪掉
通過git 和 commit 操作的文件 如果在文件夾中 自己手動(dòng)刪除 Git是能跟蹤到的
使用 git status

> 2.刪錯(cuò)了
git checkout -- files
注意:命令git rm用于刪除一個(gè)文件。如果一個(gè)文件已經(jīng)被提交到版本庫,那么你永遠(yuǎn)不用擔(dān)心誤刪,但是要小心,你只能恢復(fù)文件到最新版本,你會(huì)丟失最近一次提交后你修改的內(nèi)容
現(xiàn)在你可能遇到了兩種情況:
1 在git commit 之前 那么就用git checkout -- .\rewrite.txt 撤銷
2 如果在git commit之后 那么就用git reset -- hard id 就可以回退到你刪除的這個(gè)文件版本下
## 創(chuàng)建與合并分支
> 1.查看分支
git branch

> 2.創(chuàng)建分支
git branch 分支名字

> 3.切換分支
git checkout 分支名字

> 4.合并某分支到當(dāng)前分支
git merge 分支名字(不是當(dāng)前的分支)

> 5.刪除分支
git branch -d 分支名字
> 6.當(dāng)git上面的地址發(fā)生變化:

## 解決沖突
出現(xiàn)沖突
1 在主分支上有一個(gè)文件 confit.txt
2 然后新建一個(gè)分支queen
3 切換到新分支
4 在這個(gè)新分支上建一個(gè)文件 confit.txt
5 更改文件的內(nèi)容 在新分支上提交
6 切換分支到主分支 ,修改confit.txt(和在新分支上修改同一行)
7 提交
8 合并分支,即出現(xiàn)了沖突
解決方案:商量保留誰提交的內(nèi)容,然后手動(dòng)刪除被舍棄的內(nèi)容,最后執(zhí)行添加并修改
##bug分支
情景:undong.txt 工作還沒做完(暫存區(qū)有很多add文件,這時(shí)還沒有commit),這時(shí)接收到一個(gè)必須在兩小時(shí)內(nèi)完成的bug文件(和之前的工作無關(guān))
1 這時(shí)就要保存工作現(xiàn)場 git stash
2 添加新分支 git branch fixbug
3 切換到這個(gè)分支 git checkout fixbug
4 git add bug文件
5 提交 git commit
6 刪除該分支(一般情況應(yīng)該合并)
查看分支現(xiàn)場 git
7 修復(fù)之前的分支 git stash pop
分類:?HTML/CSS