git /g?t/ 是一個(gè)開(kāi)源的分布式版本控制系統(tǒng)
最初是 Linus Torvalds 為了幫助管理 Linux 內(nèi)核開(kāi)發(fā)而開(kāi)發(fā)的一個(gè)開(kāi)放源碼的版本控制軟件
介紹
版本控制
版本控制是一種記錄一個(gè)或若干文件內(nèi)容變化赖舟,以便將來(lái)查閱特定版本修訂情況的系統(tǒng)。可以對(duì)任何類(lèi)型的文件進(jìn)行版本控制,便于不同的開(kāi)發(fā)者協(xié)同工作
集中式版本控制
集中化的版本控制系統(tǒng)是為了讓不同系統(tǒng)上的開(kāi)發(fā)者協(xié)同工作里烦。例如 SVN,它會(huì)有一個(gè)單一的集中管理的服務(wù)器锥债,保存所有文件的修訂版本岸售,而協(xié)同工作的人通過(guò)客戶端連接到這臺(tái)服務(wù)器,拉取最新的文件或者是提交更新
在這個(gè)系統(tǒng)中翰灾,每個(gè)人可以看到項(xiàng)目中其他人的工作缕粹,管理員也能很好的掌握和分配每個(gè)開(kāi)發(fā)者的權(quán)限。但由于版本庫(kù)是集中在服務(wù)器上的纸淮,如果出現(xiàn)了中央服務(wù)器的單點(diǎn)故障平斩,在這個(gè)時(shí)間內(nèi),誰(shuí)都無(wú)法提交更新咽块,而且整個(gè)項(xiàng)目的歷史記錄被保存在單一位置绘面,就有丟失所有歷史更新記錄的風(fēng)險(xiǎn)
分布式版本控制
分布式的版本控制解決了集中化版本控制的一些問(wèn)題,客戶端并不只提取最新版本的文件快照侈沪,而是把代碼倉(cāng)庫(kù)完整地鏡像下來(lái)揭璃。這么一來(lái),任何一處協(xié)同工作用的服務(wù)器發(fā)生故障亭罪,事后都可以用任何一個(gè)鏡像出來(lái)的本地倉(cāng)庫(kù)恢復(fù)瘦馍。因?yàn)槊恳淮蔚目寺〔僮鳎瑢?shí)際上都是一次對(duì)代碼倉(cāng)庫(kù)的完整備份
更進(jìn)一步应役,許多這類(lèi)系統(tǒng)都可以指定和若干不同的遠(yuǎn)端代碼倉(cāng)庫(kù)進(jìn)行交互情组。籍此,你就可以在同一個(gè)項(xiàng)目中箩祥,分別和不同工作小組的人相互協(xié)作院崇。你可以根據(jù)需要設(shè)定不同的協(xié)作流程,比如層次模型式的工作流袍祖,而這在以前的集中式系統(tǒng)中是無(wú)法實(shí)現(xiàn)的
Git 介紹
直接記錄快照底瓣,而非差異比較
Git 保存的不是文件的變化或者差異,而是一系列不同時(shí)刻的文件快照
Git 把數(shù)據(jù)看作是對(duì)小型文件系統(tǒng)的一組快照盲泛。 每次提交更新濒持,或在 Git 中保存項(xiàng)目狀態(tài)時(shí),它會(huì)對(duì)當(dāng)時(shí)的全部文件制作一個(gè)快照并保存這個(gè)快照的索引寺滚。 為了高效柑营,如果文件沒(méi)有修改,Git 不再重新存儲(chǔ)該文件村视,而是只保留一個(gè)鏈接指向之前存儲(chǔ)的文件官套。Git 對(duì)待數(shù)據(jù)更像是一個(gè)快照流
近乎所有操作都是本地執(zhí)行
在 Git 中的絕大多數(shù)操作都只需要訪問(wèn)本地文件和資源,因?yàn)槟阍诒镜卮疟P(pán)上就有項(xiàng)目的完整歷史,所以大部分操作看起來(lái)瞬間完成奶赔,
Git 保證完整性
Git 中所有數(shù)據(jù)在存儲(chǔ)前都計(jì)算校驗(yàn)和惋嚎,然后以校驗(yàn)和來(lái)引用
Git 一般只添加數(shù)據(jù)
執(zhí)行的 Git 操作,幾乎只往 Git 數(shù)據(jù)庫(kù)中增加數(shù)據(jù)
Git安裝
Linux 上安裝
Linux 上使用 yum 安裝站刑,yum install git
$ sudo yum install git
Windows 上安裝
官網(wǎng)上下載安裝包安裝即可
配置用戶信息
安裝完后需要設(shè)置用戶名稱(chēng)和郵件地址另伍,這樣做很重要,因?yàn)槊恳粋€(gè) Git 的提交都會(huì)使用這些信息绞旅,并且它會(huì)寫(xiě)入到你的每一次提交中摆尝,不可更改
$ git config --global user.name "zou"
$ git config --global user.email zouxq412@foxmail.com
配置完后可以使用 git config --list
查看配置信息
使用了 --global 選項(xiàng),表示全局配置因悲,那么該命令只需要運(yùn)行一次堕汞,因?yàn)橹鬅o(wú)論你在該系統(tǒng)上做任何事情, Git 都會(huì)使用那些信息晃琳。 當(dāng)你想針對(duì)特定項(xiàng)目使用不同的用戶名稱(chēng)與郵件地址時(shí)讯检,可以在那個(gè)項(xiàng)目目錄下運(yùn)行沒(méi)有 --global 選項(xiàng)的命令來(lái)配置
Git 工作區(qū)、暫存區(qū)和版本庫(kù)
在了解 Git 的基本操作之前卫旱,我們先來(lái)了解 Git 工作區(qū)人灼、暫存區(qū)和版本庫(kù)的概念
在 Git 中的文件有三種狀態(tài):已提交(committed): 表示數(shù)據(jù)已經(jīng)安全的保存在本地?cái)?shù)據(jù)庫(kù)中;已修改(modified): 表示修改了文件誊涯,但還沒(méi)保存到數(shù)據(jù)庫(kù)中挡毅;已暫存(staged): 表示對(duì)一個(gè)已修改文件的當(dāng)前版本做了標(biāo)記,使之包含在下次提交的快照中
由此也引入了 Git 項(xiàng)目的三個(gè)工作區(qū)域的概念:
- 工作區(qū): 就是項(xiàng)目文件所在的目錄
-
暫存區(qū): stage 或 index暴构。一般存放在
.git/index
文件中跪呈,所以我們把暫存區(qū)有時(shí)也叫作索引 -
版本庫(kù): 工作區(qū)下隱藏目錄
.git
,這里記錄著倉(cāng)庫(kù)的版本信息和歷史記錄
下面這個(gè)圖展示了工作區(qū)取逾、版本庫(kù)中的暫存區(qū)和版本庫(kù)之間的關(guān)系:
下面我們通過(guò)創(chuàng)建倉(cāng)庫(kù)和基本操作來(lái)了解這三個(gè)工作區(qū)域的關(guān)系
Git 倉(cāng)庫(kù)創(chuàng)建及基本操作
創(chuàng)建 Git 倉(cāng)庫(kù)
倉(cāng)庫(kù)也叫版本庫(kù)(repository)耗绿,可以簡(jiǎn)單理解成一個(gè)目錄,這個(gè)目錄里面的所有文件都可以被 Git 管理起來(lái)砾隅,每個(gè)文件的修改误阻、刪除,Git都能跟蹤晴埂,以便任何時(shí)刻都可以追蹤歷史究反,或者在將來(lái)某個(gè)時(shí)刻可以還原
創(chuàng)建并初始化倉(cāng)庫(kù)
git init
是用來(lái)初始化一個(gè) Git 倉(cāng)庫(kù)的
git init
該命令會(huì)在當(dāng)前目錄下創(chuàng)建一個(gè) .git
的目錄,這個(gè)子目錄含有你初始化的 Git 倉(cāng)庫(kù)中所有的必須文件儒洛。這個(gè)時(shí)候只是對(duì)倉(cāng)庫(kù)做了初始化的操作精耐,假如該目錄下原本就有文件,需要對(duì)這些文件進(jìn)行版本控制琅锻,可以通過(guò) git add <file>
跟蹤這些文件并提交 git commit -m <message>
git add .
git commit -m 'initial project version'
上面是把目錄下的所有文件提交到了倉(cāng)庫(kù)中
克隆現(xiàn)有的倉(cāng)庫(kù)
如果想獲取現(xiàn)有 Git 倉(cāng)庫(kù)的拷貝卦停,需要用 git clone <repo>
或 git clone <repo> <directory>
repo 是倉(cāng)庫(kù)地址向胡,directory 是本地倉(cāng)庫(kù)的名稱(chēng),即目錄名稱(chēng)
如下面我要克隆 github 上的一個(gè)倉(cāng)庫(kù)惊完,并制定本地倉(cāng)庫(kù)的名稱(chēng)為 mylibname
git clone https://github.com/xxxx/xxxx mylibname
基本操作
工作目錄下的每一個(gè)文件有這兩種狀態(tài):
-
已跟蹤
已經(jīng)納入了版本控制的文件僵芹,在上一次快照中有它們的記錄,它們的狀態(tài)可能處于 未修改小槐,已修改 或 已放入暫存區(qū)拇派。 -
未跟蹤
即還沒(méi)有加入到版本控制的文件
新增的未跟蹤文件(untracked),和編輯過(guò)被 Git 記為已修改的文件(modified)凿跳。 通過(guò) git add
放入暫存區(qū)(staged)攀痊,然后 git commit
提交所有暫存了的修改,提交后的文件即為未修改文件(unmodified)拄显,如此反復(fù)
操作命令:
-
git status
查看文件狀態(tài) -
git add
添加文件到暫存區(qū),包括未跟蹤和修改的文件 -
git diff
查看修改內(nèi)容 -
git commit
提交更新案站,添加暫存區(qū)的內(nèi)容到本地倉(cāng)庫(kù) -
git reset HEAD
取消暫存 -
git rm
移除文件 -
git mv
移動(dòng)文件
這里我新建一個(gè) demo 目錄作為倉(cāng)庫(kù)躬审,并初始化這個(gè)倉(cāng)庫(kù)
接下來(lái)我們使用上面新建的倉(cāng)庫(kù) demo,并對(duì)里面的文件做一些操作
先創(chuàng)建一個(gè)新的文件 touch readme.txt
查看當(dāng)前文件狀態(tài)
要查看倉(cāng)庫(kù)目錄下哪些文件處于狀態(tài)狀態(tài)蟆盐,使用 git status
命令
-
Untracked files
未被跟蹤的文件 -
Changes not staged for commit
修改的文件 -
Changes to be committed
暫存狀態(tài)文件
可以看到新建的文件 readme.txt
的文件狀態(tài)為 untracked
承边,并提示我們要通過(guò) git add <file>
命令去跟蹤我們需要提交的文件
如果使用
git status -s
命令或git status --short
命令,將得到一種更為緊湊的格式輸出
跟蹤新文件/ 暫存已修改的文件
使用命令 git add <file>
開(kāi)始跟蹤一個(gè)文件或暫存修改的文件石挂,會(huì)把文件添加到暫存區(qū)
git add readme.txt
再次使用 git status
命令查看博助,會(huì)看到 readme.txt 文件已經(jīng)被跟蹤,并處于暫存狀態(tài)痹愚。Changes to be committed
下的文件就是處于暫存狀態(tài)
git add
命令使用文件或目錄的路徑作為參數(shù)富岳;如果參數(shù)是目錄的路徑,該命令將遞歸地跟蹤該目錄下的所有文件
該命令還用來(lái)暫存已修改的文件拯腮,就是 Changes not staged for commit
下的文件
查看已暫存和未暫存的修改
這個(gè)時(shí)候假如我們對(duì)暫存的文件進(jìn)行了修改
echo 'My Project' > readme.txt
使用 git status
命令查看窖式,我們可以看到多出了一個(gè)未被暫存,被修改狀態(tài)的文件动壤,而使用 git status
命令并不能看到具體修改的地方萝喘,這時(shí)可以用 git diff
來(lái)查看未暫存的文件更新的部分
輸入 git diff
來(lái)查看未暫存的文件更新的部分
該命令比較的是工作目錄中當(dāng)前文件和暫存區(qū)域快照之間的差異, 也就是修改之后還沒(méi)有暫存起來(lái)的變化內(nèi)容琼懊。若要查看已暫存的將要添加到下次提交里的內(nèi)容阁簸,可以用 git diff --cached
命令
-
git diff
尚未暫存的改動(dòng) -
git diff --cached
查看已暫存的改動(dòng)
提交更新
當(dāng)暫存區(qū)的文件已經(jīng)準(zhǔn)備妥當(dāng)可以提交了,可以通過(guò)命令 git commit
來(lái)提交哼丈,或者直接加入說(shuō)明 git commit -m <message>
git commit
這種方式會(huì)啟動(dòng)文本編輯器以便輸入本次提交的說(shuō)明(這里的編輯器是 vim)
使用 git commit -m <message>
請(qǐng)記住启妹,提交時(shí)記錄的是放在暫存區(qū)域的快照。 任何還未暫存的仍然保持已修改狀態(tài)削祈,可以在下次提交時(shí)納入版本管理翅溺。 每一次運(yùn)行提交操作脑漫,都是對(duì)你項(xiàng)目作一次快照,以后可以回到這個(gè)狀態(tài)咙崎,或者進(jìn)行比較
跳過(guò)使用暫存區(qū)域
Git 提供了一個(gè)跳過(guò)使用暫存區(qū)域的方式优幸, 只要在提交的時(shí)候,給
git commit
加上-a
選項(xiàng)褪猛,Git 就會(huì)自動(dòng)把所有已經(jīng)跟蹤過(guò)的文件暫存起來(lái)一并提交网杆,從而跳過(guò)git add
步驟
取消暫存
git reset HEAD <file>...
用來(lái)取消已暫存的內(nèi)容
我們修改下 readme.txt ,并 git add
到暫存區(qū)
echo 'modify content' > readme.txt
git add readme.txt
通過(guò) git status
可以看到 readme.txt 已經(jīng)添加到暫存區(qū)了
假如這時(shí)不想把它提交更新并加入到下一次的快照當(dāng)中伊滋,就可以通過(guò)git reset HEAD <file>
去取消已暫存的內(nèi)容
git reset HEAD readme.txt
撤消對(duì)文件的修改
如果你想撤銷(xiāo)對(duì)文件的修改碳却,也就是還原到未修改前的狀態(tài),可以使用
git checkout -- [file]
命令笑旺。該命令會(huì)取消你對(duì)該文件做的修改內(nèi)容昼浦。
移除文件
假如我們現(xiàn)在去刪除 readme.txt 這個(gè)文件,再通過(guò) git status
查看狀態(tài)
它是會(huì)記錄我們的刪除操作筒主,標(biāo)記為未暫存的文件
然后再運(yùn)行 git rm <file>
記錄此次移除文件的操作
下次提交更新 git commit
之后关噪,該文件就不再納入版本控制管理中了
如果刪除之前修改過(guò)并且已經(jīng)放到暫存區(qū)域的話,則必須要用強(qiáng)制刪除選項(xiàng) -f
乌妙,即git rm -f <file>
如果把文件從暫存區(qū)域移除使兔,但仍然希望保留在當(dāng)前工作目錄中,換句話說(shuō)藤韵,僅是從跟蹤清單中刪除虐沥,使用 --cached
選項(xiàng)即可
移動(dòng)文件
git mv
命令用于移動(dòng)或重命名一個(gè)文件、目錄泽艘、軟連接欲险。
我們先撤銷(xiāo)對(duì) readme.txt 文件的刪除
git reset HEAD readme.txt
git checkout -- readme.txt
然后使用 git mv
對(duì)其重命名
git mv readme.txt README.md
Git 主要功能
遠(yuǎn)程倉(cāng)庫(kù)(github)
上面我們有關(guān)的命名操作都是本地執(zhí)行,如果需要分享代碼或與其他開(kāi)發(fā)人員協(xié)同工作悉盆,就需要連接遠(yuǎn)程倉(cāng)庫(kù)了盯荤。這個(gè)遠(yuǎn)程倉(cāng)庫(kù)是指托管在因特網(wǎng)或其他網(wǎng)絡(luò)中的你的項(xiàng)目的版本庫(kù)
這里我們使用 github 作為遠(yuǎn)程倉(cāng)庫(kù)
添加遠(yuǎn)程倉(cāng)庫(kù)
運(yùn)行 git remote add <shortname> <url>
添加一個(gè)新的遠(yuǎn)程 Git 倉(cāng)庫(kù)
這里是以 github 做為遠(yuǎn)程倉(cāng)庫(kù)為例,本地 Git 倉(cāng)庫(kù)和 GitHub 倉(cāng)庫(kù)之間的傳輸是通過(guò)SSH加密的焕盟,我們需要先配置驗(yàn)證信息
使用以下命令生成 SSH Key
ssh-keygen -t rsa -C "zouxq412@foxmail.com"
這里的郵箱為你 github 賬號(hào)綁定的郵箱秋秤,生成 SSH Key 后我們?nèi)サ剿4娴穆窂?~/.ssh
下打開(kāi) id_rsa.pub
復(fù)制里面的公鑰
然后我們?nèi)サ?github 的設(shè)置中心找到 SSH and GPG keys,點(diǎn)擊 New SSH key 設(shè)置 SSH 公鑰
將復(fù)制的 SSH 公鑰添加并保存
為了驗(yàn)證是否成功脚翘,使用命令 ssh -T git@github.com
接下來(lái)我們?cè)?github上去新建一個(gè)倉(cāng)庫(kù)
創(chuàng)建成功后灼卢,顯示以下信息
上面會(huì)有一些提示,允許我們創(chuàng)建一個(gè)新的本地倉(cāng)庫(kù)或把已存在的倉(cāng)庫(kù)推到 github倉(cāng)庫(kù)上来农,這里我們直接把直接的 demo 上傳到這個(gè) github 倉(cāng)庫(kù)中
git remote add origin https://github.com/Morgan412/demo.git
git push -u origin master
第一次會(huì)讓我們輸入 github 的賬號(hào)密碼
git push
會(huì)把本地倉(cāng)庫(kù)的內(nèi)容推送到遠(yuǎn)程倉(cāng)庫(kù)中鞋真,這時(shí)可以刷新下 github 的倉(cāng)庫(kù)頁(yè)面,會(huì)發(fā)現(xiàn)已經(jīng)有上傳的內(nèi)容了
推送到遠(yuǎn)程倉(cāng)庫(kù)的命令為: git push [remote-name] [branchname]
查看當(dāng)前的遠(yuǎn)程倉(cāng)庫(kù)
查看你已經(jīng)配置的遠(yuǎn)程倉(cāng)庫(kù)服務(wù)器沃于,可以運(yùn)行 git remote
命令涩咖, 它會(huì)列出你指定的每一個(gè)遠(yuǎn)程服務(wù)器的簡(jiǎn)寫(xiě)海诲,也可以指定選項(xiàng) -v
,會(huì)顯示需要讀寫(xiě)遠(yuǎn)程倉(cāng)庫(kù)使用的 Git 保存的簡(jiǎn)寫(xiě)與其對(duì)應(yīng)的 URL
如果想要查看某一個(gè)遠(yuǎn)程倉(cāng)庫(kù)的更多信息檩互,可以使用 git remote show [remote-name]
命令
從遠(yuǎn)程倉(cāng)庫(kù)中抓取與拉取
從遠(yuǎn)程倉(cāng)庫(kù)獲取數(shù)據(jù)的命令
git fetch [remote-name]
這個(gè)命令會(huì)訪問(wèn)遠(yuǎn)程倉(cāng)庫(kù)特幔,從中拉取所有你還沒(méi)有的數(shù)據(jù),git fetch origin
會(huì)抓取克抡⒆颉(或上一次抓闰撬埂)后新推送的所有工作。 必須注意 git fetch
命令會(huì)將數(shù)據(jù)拉取到你的本地倉(cāng)庫(kù)饵较,當(dāng)它并不會(huì)自動(dòng)合并或修改你當(dāng)前的工作拍嵌,這個(gè)時(shí)候我們可以運(yùn)行 git merge [alias]/[branch]
來(lái)合并分支
現(xiàn)在我們?cè)?github 的遠(yuǎn)程倉(cāng)庫(kù)中修改 README.md 文件,然后運(yùn)行 git fetch origin
可以看到信息提示遠(yuǎn)程倉(cāng)庫(kù)的 master 有更新循诉,這時(shí)再運(yùn)行 git merge origin/master
README.md 文件被合并更新
如果你有一個(gè)分支設(shè)置為跟蹤一個(gè)遠(yuǎn)程分支横辆,可以使用
git pull <remote> <branch>
命令來(lái)自動(dòng)的抓取然后合并遠(yuǎn)程分支到當(dāng)前分支。默認(rèn)情況下茄猫,git clone
命令會(huì)自動(dòng)設(shè)置本地 master 分支跟蹤克隆的遠(yuǎn)程倉(cāng)庫(kù)的 master 分支龄糊。 運(yùn)行git pull
通常會(huì)從最初克隆的服務(wù)器上抓取數(shù)據(jù)并自動(dòng)嘗試合并到當(dāng)前所在的分支。
遠(yuǎn)程倉(cāng)庫(kù)的移除與重命名
git remote rename
去修改一個(gè)遠(yuǎn)程倉(cāng)庫(kù)的簡(jiǎn)寫(xiě)名
git remote rm [name]
可以去移除一個(gè)遠(yuǎn)程倉(cāng)庫(kù)
標(biāo)簽管理
Git 可以給歷史中的某一個(gè)提交打上標(biāo)簽募疮,可以使用這個(gè)功能來(lái)標(biāo)記發(fā)布結(jié)點(diǎn)(如v1.0),標(biāo)簽也是版本庫(kù)的一個(gè)快照
命令:
-
git tag
查看所有的標(biāo)簽 -
git tag <name>
創(chuàng)建標(biāo)簽 -
git tag -v <name> -m <message>
創(chuàng)建附注標(biāo)簽 -
git push origin [tagname]
推送標(biāo)簽到遠(yuǎn)程倉(cāng)庫(kù) -
git tag -d <tagname>
刪除本地倉(cāng)庫(kù)標(biāo)簽 -
git push <remote> :refs/tags/<tagname>
更新遠(yuǎn)程倉(cāng)庫(kù)標(biāo)簽
創(chuàng)建標(biāo)簽
創(chuàng)建標(biāo)簽命令 git tag <name>
git tag -v <name> -m <message>
可以創(chuàng)建一個(gè)附注標(biāo)簽
首先我們要切換到需要打標(biāo)簽的分支上僻弹,然后使用創(chuàng)建標(biāo)簽命令 git tag <name>
git tag v1.0.0
git tag
可以查看所有的標(biāo)簽
后期打標(biāo)簽
默認(rèn)情況下阿浓,標(biāo)簽是打在最新提交 commit 上的,假如我想對(duì)過(guò)去的某個(gè)歷史快照節(jié)點(diǎn)打標(biāo)簽?zāi)靥U溃科鋵?shí)也是可以的
git log --pretty=oneline --abbrev-commit
查看歷史 commit id芭毙,然后打上對(duì)應(yīng)標(biāo)簽即可
$ git log --pretty=oneline --abbrev-commit
459f6fc (HEAD -> master, origin/master) Update README.md
e241626 修改內(nèi)容
a9dec5d first commit
如我要給 “修改內(nèi)容” 這次 commit 打上標(biāo)簽
git tag v1.0.1 e241626
標(biāo)簽操作
共享標(biāo)簽
默認(rèn)情況下,git push
命令并不會(huì)傳送標(biāo)簽到遠(yuǎn)程倉(cāng)庫(kù)服務(wù)器上卸耘。 在創(chuàng)建完標(biāo)簽后你必須顯式地推送標(biāo)簽到共享服務(wù)器上退敦。 這個(gè)過(guò)程就像共享遠(yuǎn)程分支一樣,你可以運(yùn)行 git push origin [tagname]
如果想要一次性推送很多標(biāo)簽蚣抗,也可以使用帶有 --tags
選項(xiàng)的 git push
命令侈百。 這將會(huì)把所有不在遠(yuǎn)程倉(cāng)庫(kù)服務(wù)器上的標(biāo)簽全部傳送到那里
刪除標(biāo)簽
使用命令 git tag -d <tagname>
可以刪除掉本地倉(cāng)庫(kù)上的標(biāo)簽
上面的命令并不會(huì)從任何遠(yuǎn)程倉(cāng)庫(kù)中移除這個(gè)標(biāo)簽,如果要移除遠(yuǎn)程倉(cāng)庫(kù)的標(biāo)簽必須使用 git push <remote> :refs/tags/<tagname>
來(lái)更新你的遠(yuǎn)程倉(cāng)庫(kù)
分支管理
分支就像是科幻電影里面的平行宇宙翰铡,當(dāng)你正在電腦前努力學(xué)習(xí)Git的時(shí)候钝域,另一個(gè)你正在另一個(gè)平行宇宙里努力學(xué)習(xí)SVN
如果兩個(gè)平行宇宙互不干擾,那對(duì)現(xiàn)在的你也沒(méi)啥影響锭魔。不過(guò)例证,在某個(gè)時(shí)間點(diǎn),兩個(gè)平行宇宙合并了迷捧,結(jié)果织咧,你既學(xué)會(huì)了Git又學(xué)會(huì)了SVN胀葱!
在實(shí)際工作中,當(dāng)你需要完成某個(gè)需要笙蒙,而這個(gè)需求你可能需要2天才能完成抵屿,這時(shí)你可以新建一個(gè)分支,在分支上的任何改動(dòng)都是不影響其他分支的手趣,當(dāng)你完成了需求之后晌该,再合并分支
命令:
-
git branch
列出分支,當(dāng)前分支前面會(huì)標(biāo)一個(gè)*
號(hào) -
git branch <branchname>
創(chuàng)建分支 -
git checkout <branchname>
切換分支 -
git checkout -b <branchname>
創(chuàng)建并切換分支 -
git merge
合并分支 -
git branch -d <branchname>
刪除分支
分支的創(chuàng)建和合并
創(chuàng)建分支
git branch <branchname>
git checkout <branchname>
想要新建一個(gè)分支并同時(shí)切換到那個(gè)分支上绿渣,你可以運(yùn)行一個(gè)帶有 -b
參數(shù)的 git checkout
命令朝群,等同于上面兩個(gè)命令
git checkout -b newb
git branch
列出分支,當(dāng)前分支前面會(huì)標(biāo)一個(gè)*
號(hào)
合并分支
一旦某分支有了獨(dú)立內(nèi)容中符,你終究會(huì)希望將它合并回到你的主分支
使用 git merge
命令將任何分支合并到當(dāng)前分支中去
假如我們現(xiàn)在對(duì)新的分支內(nèi)容有了修改姜胖,現(xiàn)在要合并到主分支中
合并沖突
當(dāng)Git無(wú)法自動(dòng)合并分支時(shí),就必須首先解決沖突淀散。解決沖突后右莱,再提交,合并完成
解決沖突就是把 Git 合并失敗的文件手動(dòng)編輯為我們希望的內(nèi)容档插,再提交