0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Git分支,為何以及如何使用分支

Linux愛(ài)好者 ? 來(lái)源:未知 ? 作者:李倩 ? 2018-06-11 11:08 ? 次閱讀

在本系列的前兩篇文章中,我們開(kāi)始使用 Git,學(xué)會(huì)如何克隆項(xiàng)目,修改、增加和刪除內(nèi)容。在這第三篇文章中,我將介紹 Git 分支,為何以及如何使用分支。

不妨用樹(shù)來(lái)描繪 Git 倉(cāng)庫(kù)。圖中的樹(shù)有很多分支,或長(zhǎng)或短,或從樹(shù)干延伸或從其它分支延伸。在這里,我們用樹(shù)干比作倉(cāng)庫(kù)的 master 分支,其中master代指 ”master 分支”,是 Git 倉(cāng)庫(kù)的中心分支或第一個(gè)分支。為簡(jiǎn)單起見(jiàn),我們假設(shè)master是樹(shù)干,其它分支都是從該分支分出的。

為何在 Git 倉(cāng)庫(kù)中使用分支

使用分支的主要理由為:

如果你希望為項(xiàng)目增加新特性,但很可能會(huì)影響當(dāng)前可正常工作的代碼。對(duì)于該項(xiàng)目的活躍用戶而言,這是很糟糕的事情。與其將特性加入到其它人正在使用的master分支,更好的方法是在倉(cāng)庫(kù)的其它分支中變更代碼,下面會(huì)給出具體的工作方式。

更重要的是,Git 其設(shè)計(jì)用于協(xié)作。如果所有人都在你代碼倉(cāng)庫(kù)的master分支上操作,會(huì)引發(fā)很多混亂。對(duì)編程語(yǔ)言或項(xiàng)目的知識(shí)和閱歷因人而異;有些人可能會(huì)編寫(xiě)有錯(cuò)誤或缺陷的代碼,也可能會(huì)編寫(xiě)你覺(jué)得不適合該項(xiàng)目的代碼。使用分支可以讓你核驗(yàn)他人的貢獻(xiàn)并選擇適合的加入到項(xiàng)目中。(這里假設(shè)你是代碼庫(kù)唯一的所有者,希望對(duì)增加到項(xiàng)目中的代碼有完全的控制。在真實(shí)的項(xiàng)目中,代碼庫(kù)有多個(gè)具有合并代碼權(quán)限的所有者)

創(chuàng)建分支

讓我們回顧本系列上一篇文章,看一下在我們的 Demo 目錄中分支是怎樣的。如果你沒(méi)有完成上述操作,請(qǐng)按照文章中的指示從 GitHub 克隆代碼并進(jìn)入 Demo 目錄。運(yùn)行如下命令:

pwd

git branch

ls -la

pwd命令(是當(dāng)前工作目錄的英文縮寫(xiě))返回當(dāng)前你所處的目錄(以便確認(rèn)你在Demo目錄中),git branch列出該項(xiàng)目在你主機(jī)上的全部分支,ls -la列出當(dāng)前目錄下的所有文件。你的終端輸出類似于:

在master分支中,只有一個(gè)文件README.md。(Git 會(huì)友好地忽略掉其它目錄和文件。)

接下來(lái),運(yùn)行如下命令:

git status

git checkout -bmyBranch

git status

第一條命令git status告知你當(dāng)前位于branch master,(就像在終端中看到的那樣)它與origin/master處于同步狀態(tài),這意味著 master 分支的本地副本中的全部文件也出現(xiàn)在 GitHub 中。兩份副本沒(méi)有差異,所有的提交也是一致的。

下一條命令git checkout -b myBranch中的-b告知 Git 創(chuàng)建一個(gè)名為myBranch的新分支,然后checkout命令將我們切換到新創(chuàng)建的分支。運(yùn)行第三條命令git status確保你已經(jīng)位于剛創(chuàng)建的分支下。

如你所見(jiàn),git status告知你當(dāng)前處于myBranch分支,沒(méi)有變更需要提交。這是因?yàn)槲覀兗葲](méi)有增加新文件,也沒(méi)有修改已有文件。

如果希望以可視化的方式查看分支,可以運(yùn)行g(shù)itk命令。如果遇到報(bào)錯(cuò)bash: gitk: command not found...,請(qǐng)先安裝gitk軟件包(找到你操作系統(tǒng)對(duì)應(yīng)的安裝文檔,以獲得安裝方式)。

(LCTT 譯注:需要在有 X 服務(wù)器的終端運(yùn)行g(shù)itk,否則會(huì)報(bào)錯(cuò))

下圖展示了我們?cè)?Demo 項(xiàng)目中的所作所為:你最后一次提交(的對(duì)應(yīng)信息)是Delete file.txt,在此之前有三次提交。當(dāng)前的提交用黃點(diǎn)標(biāo)注,之前的提交用藍(lán)點(diǎn)標(biāo)注,黃點(diǎn)和Delete file.txt之間的三個(gè)方塊展示每個(gè)分支所在的位置(或者說(shuō)每個(gè)分支中的最后一次提交的位置)。由于myBranch剛創(chuàng)建,提交狀態(tài)與master分支及其對(duì)應(yīng)的記為remotes/origin/master的遠(yuǎn)程master分支保持一致。(非常感謝來(lái)自 Red Hat 的Peter Savage讓我知道gitk這個(gè)工具)

下面讓我們?cè)趍yBranch分支下創(chuàng)建一個(gè)新文件并觀察終端輸出。運(yùn)行如下命令:

echo"Creating a newFile on myBranch" > newFile

cat newFile

git status

第一條命令中的echo創(chuàng)建了名為newFile的文件,接著cat newFile打印出文件內(nèi)容,最后git status告知你我們myBranch分支的當(dāng)前狀態(tài)。在下面的終端輸出中,Git 告知myBranch分支下有一個(gè)名為newFile的文件當(dāng)前處于untracked狀態(tài)。這表明我們沒(méi)有讓 Git 追蹤發(fā)生在文件newFile上的變更。

下一步是增加文件,提交變更并將newFile文件推送至myBranch分支(請(qǐng)回顧本系列上一篇文章獲得更多細(xì)節(jié))。

git add newFile

git commit -m"Adding newFile to myBranch"

git push origin myBranch

在上述命令中,push命令使用的分支參數(shù)為myBranch而不是master。Git 添加newFile并將變更推送到你 GitHub 賬號(hào)下的 Demo 倉(cāng)庫(kù)中,告知你在 GitHub 上創(chuàng)建了一個(gè)與你本地副本分支myBranch一樣的新分支。終端輸出截圖給出了運(yùn)行命令的細(xì)節(jié)及命令輸出。

當(dāng)你訪問(wèn) GitHub 時(shí),在分支選擇的下拉列表中可以發(fā)現(xiàn)兩個(gè)可供選擇的分支。

點(diǎn)擊myBranch切換到myBranch分支,你可以看到在此分支上新增的文件。

截至目前,我們有兩個(gè)分支:一個(gè)是master分支,只有一個(gè)README.md文件;另一個(gè)是myBranch分支,有兩個(gè)文件。

你已經(jīng)知道如何創(chuàng)建分支了,下面我們?cè)賱?chuàng)建一個(gè)分支。輸入如下命令:

git checkout master

git checkout -bmyBranch2

touch newFile2

git add newFile2

git commit -m"Adding newFile2 to myBranch2"

git push origin myBranch2

我不再給出終端輸出,需要你自己嘗試,但你可以在GitHub 代碼庫(kù)中驗(yàn)證你的結(jié)果。

刪除分支

由于我們?cè)黾恿藘蓚€(gè)分支,下面刪除其中的一個(gè)(myBranch),包括兩步:

刪除本地分支你不能刪除正在操作的分支,故切換到master分支 (或其它你希望保留的分支),命令及終端輸出如下:

git branch可以列出可用的分支,使用checkout切換到master分支,然后使用git branch -D myBranch刪除該分支。再次運(yùn)行g(shù)it branch檢查是否只剩下兩個(gè)分支(而不是三個(gè))。

刪除 GitHub 上的分支使用如下命令刪除myBranch的遠(yuǎn)程分支:

git push origin :myBranch

上面push命令中分支名稱前面的冒號(hào)(:)告知 GitHub 刪除分支。另一種寫(xiě)法為:

git push -dorigin myBranch

其中 -d (也可以用 --delete) 也用于告知 GitHub 刪除你的分支。

我們學(xué)習(xí)了 Git 分支的使用,在本系列的下一篇文章中,我們將介紹如何執(zhí)行 fetch 和 rebase 操作,對(duì)于多人同時(shí)的貢獻(xiàn)的項(xiàng)目而言,這是很必須學(xué)會(huì)的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • MASTER
    +關(guān)注

    關(guān)注

    0

    文章

    104

    瀏覽量

    11288
  • Git
    Git
    +關(guān)注

    關(guān)注

    0

    文章

    199

    瀏覽量

    15761
  • GitHub
    +關(guān)注

    關(guān)注

    3

    文章

    471

    瀏覽量

    16442

原文標(biāo)題:Git 分支操作介紹

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    關(guān)于git的遠(yuǎn)程分支的詳細(xì)介紹

    不知道大家有沒(méi)有經(jīng)歷過(guò),當(dāng)我們切換到了一個(gè)新的分支想要提交代碼的時(shí)候,總會(huì)遇到這樣的錯(cuò)誤。 我們把日志里的英文翻譯過(guò)來(lái)是說(shuō),我們當(dāng)前的分支沒(méi)有設(shè)置任何上游分支。然后git提示我們可以運(yùn)
    的頭像 發(fā)表于 10-11 10:03 ?3221次閱讀
    關(guān)于<b class='flag-5'>git</b>的遠(yuǎn)程<b class='flag-5'>分支</b>的詳細(xì)介紹

    CPU分支預(yù)測(cè)對(duì)程序的影響

    分支預(yù)測(cè)的英文名字是“Branch Prediction”,如果大家在Google上搜索這個(gè)關(guān)鍵字,可以看到關(guān)于分支預(yù)測(cè)的很多內(nèi)容。不過(guò),要搞清楚分支預(yù)測(cè)是如何工作的,才是問(wèn)題的關(guān)鍵。
    發(fā)表于 09-23 14:11 ?1131次閱讀

    Git命令之本地分支與遠(yuǎn)程分支關(guān)聯(lián)和解除

    在實(shí)際的工作生活中,往往需要將本地的分支和遠(yuǎn)程分支關(guān)聯(lián),這樣我們就可以使用git pull命令來(lái)更新拉取最新的代碼,并使用git push命令將自己本地的修改推送到遠(yuǎn)程倉(cāng)庫(kù)。但是如果此
    的頭像 發(fā)表于 12-15 09:27 ?3253次閱讀
    <b class='flag-5'>Git</b>命令之本地<b class='flag-5'>分支</b>與遠(yuǎn)程<b class='flag-5'>分支</b>關(guān)聯(lián)和解除

    labview事件結(jié)構(gòu)的添加分支控件為什么分支是灰色的

    labview事件結(jié)構(gòu)的添加分支控件為什么分支是灰色的,沒(méi)辦法自定義輸入
    發(fā)表于 11-07 20:13

    git簡(jiǎn)單使用(一)

    倉(cāng)庫(kù),以及如何進(jìn)行分支控制:1.創(chuàng)建一個(gè)文件夾mkdir git-study2.初始化倉(cāng)庫(kù)git init3.查看下當(dāng)前分支
    發(fā)表于 02-17 16:18

    git merge后,原分支的內(nèi)容沒(méi)有出現(xiàn)在新的master分支中。

    我新建了一個(gè)rico分支,現(xiàn)在想把rico分支的內(nèi)容合并到master分支,但是合并之后,我在rico分鐘中新建的文件夾,并沒(méi)有出現(xiàn)在master中,這是為什么呢??rico分支中有
    發(fā)表于 03-12 00:48

    有線電視分支

    有線電視分支器實(shí)際是一種定向信號(hào)傳輸器件(內(nèi)裝定向藕合器)。一分支、二分支、四分支、八分支等多種類型,
    發(fā)表于 07-08 11:41 ?6677次閱讀

    Git Flow應(yīng)該拋棄的原因

    Git-flow 是一種分支和合并方法。十年前,因?yàn)橐黄麨椤敢粋€(gè)成功的 Git 分支模型」的文章,Git-flow 變得廣為人知。
    的頭像 發(fā)表于 03-21 13:41 ?1508次閱讀
    <b class='flag-5'>Git</b> Flow應(yīng)該拋棄的原因

    電纜分支箱安裝_電纜分支箱的應(yīng)用

    你真的對(duì)電纜分支箱安裝都非常的了解了么?在安裝之前要準(zhǔn)備什么、安裝要注意什么、安裝好之后又該如何驗(yàn)收等等,筆者特別提醒大家電纜分支箱安裝好了才可以確保后期的穩(wěn)定使用,下面就由生產(chǎn)廠家紅蘇電器為大家詳細(xì)介紹電纜分支箱安裝知識(shí)。
    發(fā)表于 12-24 16:43 ?3851次閱讀

    Git / GitHub 是什么?有什么用?

    分支Git 里很重要的概念,大家可以使用 Learning Git Branching 這個(gè)在線游戲來(lái)學(xué)習(xí)和理解分支。
    發(fā)表于 12-09 09:39 ?941次閱讀

    Git分支管理

    在項(xiàng)目的開(kāi)發(fā)過(guò)程中,很多時(shí)候都會(huì)使用Git托管工具進(jìn)行項(xiàng)目文件或者代碼的管理,方便團(tuán)隊(duì)成員之間的協(xié)作開(kāi)發(fā)。使用Git進(jìn)行項(xiàng)目管理目前也是越來(lái)越受到歡迎,除了Git還有很多的其他項(xiàng)目管理,其目的都是為了能夠方便項(xiàng)目管理、團(tuán)隊(duì)協(xié)作開(kāi)
    的頭像 發(fā)表于 02-20 14:49 ?1045次閱讀
    <b class='flag-5'>Git</b>的<b class='flag-5'>分支</b>管理

    git拉取遠(yuǎn)程分支到本地的兩種方法

    使用這種方式會(huì)在本地倉(cāng)庫(kù)新建分支xxx,并自動(dòng)切換到新建的分支xxx,當(dāng)然了遠(yuǎn)程分支xxx的代碼也拉取到了本地分支xxx中。采用這種方法建立的本地
    的頭像 發(fā)表于 05-06 09:19 ?1.5w次閱讀

    git rebase與相關(guān)git merge命令比較

    。 #概念 ????首先要理解的是git rebase和git merge解決了同樣的問(wèn)題。這兩個(gè)命令都旨在將更改從一個(gè)分支集成到另一個(gè)分支 - 它們只是以不同的方式進(jìn)行。試想一下當(dāng)你
    的頭像 發(fā)表于 05-26 16:22 ?883次閱讀
    <b class='flag-5'>git</b> rebase與相關(guān)<b class='flag-5'>git</b> merge命令比較

    git rebase和git merge的區(qū)別

    ? 解決沖突 git rebase和git merge的區(qū)別 分支合并 git merge是用來(lái)合并兩個(gè)分支的。 比如:將 b
    的頭像 發(fā)表于 07-05 09:54 ?643次閱讀
    <b class='flag-5'>git</b> rebase和<b class='flag-5'>git</b> merge的區(qū)別

    何以及為何要在EtherCAT?應(yīng)用中使用DP83826

    電子發(fā)燒友網(wǎng)站提供《如何以及為何要在EtherCAT?應(yīng)用中使用DP83826.pdf》資料免費(fèi)下載
    發(fā)表于 08-27 10:19 ?0次下載
    如<b class='flag-5'>何以及</b><b class='flag-5'>為何</b>要在EtherCAT?應(yīng)用中使用DP83826