Git 分支操作介紹

2021-02-20 Linux愛好者

(點擊上方藍字,快速關注我們)

英文:Kedar Vijay Kulkarni,翻譯:Linux中國/Andy Song

linux.cn/article-9724-1.html

在本系列的前兩篇文章中,我們開始使用 Git,學會如何克隆項目,修改、增加和刪除內容。在這第三篇文章中,我將介紹 Git 分支,為何以及如何使用分支。

不妨用樹來描繪 Git 倉庫。圖中的樹有很多分支,或長或短,或從樹幹延伸或從其它分支延伸。在這裡,我們用樹幹比作倉庫的 master 分支,其中 master 代指 」master 分支」,是 Git 倉庫的中心分支或第一個分支。為簡單起見,我們假設 master 是樹幹,其它分支都是從該分支分出的。

為何在 Git 倉庫中使用分支

使用分支的主要理由為:

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

更重要的是,Git 其設計用於協作。如果所有人都在你代碼倉庫的 master 分支上操作,會引發很多混亂。對程式語言或項目的知識和閱歷因人而異;有些人可能會編寫有錯誤或缺陷的代碼,也可能會編寫你覺得不適合該項目的代碼。使用分支可以讓你核驗他人的貢獻並選擇適合的加入到項目中。(這裡假設你是代碼庫唯一的所有者,希望對增加到項目中的代碼有完全的控制。在真實的項目中,代碼庫有多個具有合併代碼權限的所有者)


創建分支

讓我們回顧本系列上一篇文章,看一下在我們的 Demo 目錄中分支是怎樣的。如果你沒有完成上述操作,請按照文章中的指示從 GitHub 克隆代碼並進入 Demo 目錄。運行如下命令:

pwd

git branch

ls -la

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

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

接下來,運行如下命令:

git status

git checkout -b myBranch

git status

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

下一條命令 git checkout -b myBranch 中的 -b 告知 Git 創建一個名為 myBranch 的新分支,然後 checkout 命令將我們切換到新創建的分支。運行第三條命令 git status 確保你已經位於剛創建的分支下。

如你所見,git status 告知你當前處於 myBranch 分支,沒有變更需要提交。這是因為我們既沒有增加新文件,也沒有修改已有文件。

如果希望以可視化的方式查看分支,可以運行 gitk 命令。如果遇到報錯 bash: gitk: command not found...,請先安裝 gitk 軟體包(找到你作業系統對應的安裝文檔,以獲得安裝方式)。

(LCTT 譯註:需要在有 X 伺服器的終端運行 gitk,否則會報錯)

下圖展示了我們在 Demo 項目中的所作所為:你最後一次提交(的對應信息)是 Delete file.txt,在此之前有三次提交。當前的提交用黃點標註,之前的提交用藍點標註,黃點和 Delete file.txt 之間的三個方塊展示每個分支所在的位置(或者說每個分支中的最後一次提交的位置)。由於 myBranch 剛創建,提交狀態與 master 分支及其對應的記為 remotes/origin/master 的遠程 master 分支保持一致。(非常感謝來自 Red Hat 的 Peter Savage讓我知道 gitk 這個工具)

下面讓我們在 myBranch 分支下創建一個新文件並觀察終端輸出。運行如下命令:

echo "Creating a newFile on myBranch" > newFile

cat newFile

git status

第一條命令中的 echo 創建了名為 newFile 的文件,接著 cat newFile 列印出文件內容,最後 git status 告知你我們 myBranch 分支的當前狀態。在下面的終端輸出中,Git 告知 myBranch 分支下有一個名為 newFile 的文件當前處於 untracked 狀態。這表明我們沒有讓 Git 追蹤發生在文件 newFile 上的變更。

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

git add newFile

git commit -m "Adding newFile to myBranch"

git push origin myBranch

在上述命令中,push 命令使用的分支參數為 myBranch 而不是 master。Git 添加 newFile並將變更推送到你 GitHub 帳號下的 Demo 倉庫中,告知你在 GitHub 上創建了一個與你本地副本分支 myBranch 一樣的新分支。終端輸出截圖給出了運行命令的細節及命令輸出。

當你訪問 GitHub 時,在分支選擇的下拉列表中可以發現兩個可供選擇的分支。

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

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

你已經知道如何創建分支了,下面我們再創建一個分支。輸入如下命令:

git checkout master

git checkout -b myBranch2

touch newFile2

git add newFile2

git commit -m "Adding newFile2 to myBranch2"

git push origin myBranch2

我不再給出終端輸出,需要你自己嘗試,但你可以在 GitHub 代碼庫 中驗證你的結果。

刪除分支

由於我們增加了兩個分支,下面刪除其中的一個(myBranch),包括兩步:

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

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

刪除 GitHub 上的分支 使用如下命令刪除 myBranch 的遠程分支:

git push origin :myBranch

 

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

git push -d origin myBranch

 

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

我們學習了 Git 分支的使用,在本系列的下一篇文章中,我們將介紹如何執行 fetch 和 rebase 操作,對於多人同時的貢獻的項目而言,這是很必須學會的。

系列回顧

【關於投稿】

如果大家有原創好文投稿,請直接給公號發送留言。

① 留言格式:
【投稿】+《 文章標題》+ 文章連結

② 示例:
【投稿】《不要自稱是程式設計師,我十多年的 IT 職場總結》:http://blog.jobbole.com/94148/

③ 最後請附上您的個人簡介哈~

看完本文有收穫?請分享給更多人

關注「Linux 愛好者」,提升Linux技能

相關焦點

  • Git 分支操作介紹 | Linux 中國
    在這個 Git 入門系列的第三篇中,我們來學習一下如何添加和刪除 Git 分支。在本系列的前兩篇文章中,我們開始使用 Git[1],學會如何克隆項目,修改、增加和刪除內容[2]。在這第三篇文章中,我將介紹 Git 分支,為何以及如何使用分支。tree branches不妨用樹來描繪 Git 倉庫。
  • git分支概念和分支相關操作
    分支是git中最容易被誤解的概念之一,雖然git分支並不難理解。使用分支時候是不有點不知所措,"老虎吃天,無處下爪"的感覺?還有那一系列的merge和rebase黑魔法操作,甚至是那些許的衝突都曾讓你頭痛不已?
  • eclipse GIT本地庫分支操作
    點擊上方藍色字體,選擇「標星公眾號」優質文章,第一時間送達66套java從入門到精通實戰課程分享git分支是一個重要的知識點,平時我們開發主要結合eclipse,idea來操作,今天這貼主要以eclipse來操作git本地庫分支,主要內容包括新建分支,切換分支,合併分支,衝突解決,重命名分支,刪除分支等;1,新建項目 branchEclipseHelloWorld(默認master主分支)再把該項目初始化成本地庫(具體步驟前面已經講過
  • Git 分支 - 分支的新建與合併
    想要新建一個分支並同時切換到那個分支上,你可以運行一個帶有 -b 參數的 git checkout 命令:$ git checkout -b iss53Switched to a new branch "iss53"它是下面兩條命令的簡寫:$ git branch iss53$ git checkout iss53
  • git 分支合併策略
    前言git 依靠分布式版本控制、以及出眾的分支功能受到網際網路開發們的青睞,如果你上過 github 就離不開 git 的相關操作。我司原來用的是 svn ,經過兩年的時間,全項目都已換成 git ,我現在個人項目也全部用 github 和 gitee 。
  • git分支的創建、刪除、切換、合併
    先看一下git的命令:1.查看本地分支 git branch ;查看遠程分支 git branch -r ;切換分支 git checkout -b agrochemical origin/agrochemical;
  • 您必須知道的 Git 分支開發規範,附 Git 常用命令大全!
    分支合併到dev,同步代碼測試環境合併示例:(release)$: git merge dev --no-ff# 把dev分支合併到release,然後在測試環境拉取並測試線上生產環境操作示例:(master)$: git merge release --no-ff
  • Git分支原理命令圖文解析
    現在,讓我們看看與git分支有關的操作命令: 1、git branch [option] [name] 如果不使用任何參數,它可以用來查看所有的分支,而在分支名前有*標記的則為主分支,如果加上name為創建新分支,,如git branch child,則會創建一個名為child的分支,此外,它有一些常用的參數:
  • 困擾你的Git操作?
    學習前端,離不開 Git 的使用,面試時也是一個常考的話題,在日常開發中,也困擾我們許久,下面就讓我們一起走進它~我將從以下幾點進行介紹, 準備好走進 Git 的世界了嘛~高頻詞彙的含義git 常用指令幾種常見 git 操作流程高頻詞彙的介紹git 操作博大精深,細節很多,對於日常開發的我們而言,熟識幾條常用的操作便可解決日常問題
  • Git入門到高級系列2-git高級操作
    創建分支創建分支:git branch 分支名字命令,切換分支的命令使用 git checkout 分支名字$ git branch dev$ git checkout dev# -b創建分支,checkout是切換分支$ git checkout -b dev
  • 團隊協作開發,你需要知道這些git操作
    前言本文介紹git的各種操作,有需要的朋友建議加入收藏備用,順便來個贊。由於篇幅限制,並未深入覆蓋各個命令的所有使用場景。若要了解各種場景的深入操作請評論留言並關注我,我會根據需要把本文拆分為多篇文章進行深入講解。文章篇幅較長,可根據下面的目錄查找自己需要的內容。
  • Git-操作文件
    add -i 相似,沒什麼鳥用update:詳見下方 git add -urevert:把已經添加到暫存區的文件從暫存區剔除,其操作方式和 update 類似add untracked:可以把新增的文件添加到暫存區,其操作方式和 update 類似patch:詳見下方 git add -pdiff:比較暫存區文件和本地版本庫的差異
  • git解決衝突操作 - CSDN
    4.解決衝突解決方案:在本地merge要提交的代碼,處理衝突後,重新commit並push到遠端舉例:從test往master分支提交代碼,發現無法merge,確認diff中有衝突文件。具體操作如下:step1: 切到master分支:  git checkout masterstep2: 拉最新的master代碼,git pull origin masterstep3: 切回test,git checkout teststep4: 合併分支,git merge master -m "merge master"step5
  • Git: 如何優雅的執行「git pull」操作
  • git底層原理,從常見操作解釋git的底層原理,再也不怯
    $ git log --stat 3d87a34c5在這裡插入圖片描述那麼一個commit對象可以用下圖表示在這裡插入圖片描述3.git branch/git tag原理(1)創建分支/標籤我們所有的對象都已經介紹完畢了,那麼branch和tag是如何實現的呢,聰明的你是否已經想到,沒錯就是使用指針。
  • git diff在對比分支時的用法
    git diff用來比較文件之間的不同,用法有多種,本文單講對比分支時的用法。
  • 從工作到現在Git操作總結
    (不是託)如果你是新人,讀了這本小冊並且跟著實際操作,你會對Git有一個大致的了解。如果你已經使用過一段時間Git,讀了該小冊之後,會讓你有一種醍醐灌頂的感覺。該小冊建議建議反覆閱讀(我覺得至少三次),每次閱讀之後你都會有不一樣的收穫。如果大家還想對Git有更深一步的研究可以訪問 Git-book。
  • 詳細介紹下git中的多種撤銷
    前面我們介紹過主流版本控制系統git和svn的區別,參考:手把手教你入門git,下面我們再介紹下git中關於各種撤銷的操作流程。當你在git倉庫中進行一次新的提交的時,git保存這個特定時間的倉庫的快照,並生產一個唯一串與本次提交相對應。之後,就可以利用 git返回到項目的一個早期版本。下面我們說一些常見的撤銷常見場景,以及 git的命令操作步驟。
  • git的幾種實用操作(合併代碼與暫存-復原工作修改)
    本文轉載自【微信公眾號:羽林君,ID:Conscience_Remains】,經微信公眾號授權轉載,如需轉載與原文作者聯繫總述git工具也用了很久,自己也寫了幾篇使用教程,今天繼續給大家分享一些我工作中使用過的git操作。
  • 這才是真正的Git——Git實用技巧
    在這篇文章裡我會使用操作錄屏的方式來介紹例子,希望這種方式可以讓你更直觀的了解命令的使用方法。將幾個commit壓縮成一個我們知道Git的出現就是為了儘量保證我們的操作不被丟失,在Git內部原理中我們講過,git object是旦被創建,就不可變更,所以只要找到它對應的哈希值,就能找回。但是ref呢?