作者 | Kedar Vijay Kulkarni
譯者 | Andy Song (pinewall) ? ? ? 共計翻譯:20 篇 貢獻時間:73 天
在這個 Git 入門系列的第三篇中,我們來學習一下如何新增和刪除 Git 分支。
在本系列的前兩篇文章中,我們開始使用 Git[1],學會如何克隆專案,修改、增加和刪除內容[2]。在這第三篇文章中,我將介紹 Git 分支,為何以及如何使用分支。
tree branches
不妨用樹來描繪 Git 倉庫。圖中的樹有很多分支,或長或短,或從樹幹延伸或從其它分支延伸。在這裡,我們用樹幹比作倉庫的 master 分支,其中 master
代指 ”master 分支”,是 Git 倉庫的中心分支或第一個分支。為簡單起見,我們假設 master
是樹幹,其它分支都是從該分支分出的。
為何在 Git 倉庫中使用分支
使用分支的主要理由為:
master
分支,更好的方法是在倉庫的其它分支中變更程式碼,下麵會給出具體的工作方式。master
分支上操作,會引發很多混亂。對程式語言或專案的知識和閱歷因人而異;有些人可能會編寫有錯誤或缺陷的程式碼,也可能會編寫你覺得不適合該專案的程式碼。使用分支可以讓你核驗他人的貢獻並選擇適合的加入到專案中。(這裡假設你是程式碼庫唯一的所有者,希望對增加到專案中的程式碼有完全的控制。在真實的專案中,程式碼庫有多個具有合併程式碼許可權的所有者)建立分支
讓我們回顧本系列上一篇文章[2],看一下在我們的 Demo 目錄中分支是怎樣的。如果你沒有完成上述操作,請按照文章中的指示從 GitHub 克隆程式碼併進入 Demo 目錄。執行如下命令:
pwd
git branch
ls -la
pwd
命令(是當前工作目錄的英文縮寫)傳回當前你所處的目錄(以便確認你在 Demo
目錄中),git branch
列出該專案在你主機上的全部分支,ls -la
列出當前目錄下的所有檔案。你的終端輸出類似於:
Terminal output
在 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
分支,沒有變更需要提交。這是因為我們既沒有增加新檔案,也沒有修改已有檔案。
Terminal output
如果希望以視覺化的方式檢視分支,可以執行 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[4] 讓我知道 gitk
這個工具)
Gitk output
下麵讓我們在 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
上的變更。
Terminal output
下一步是增加檔案,提交變更並將 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
一樣的新分支。終端輸出截圖給出了執行命令的細節及命令輸出。
Terminal output
當你訪問 GitHub 時,在分支選擇的下拉串列中可以發現兩個可供選擇的分支。
GitHub
點選 myBranch
切換到 myBranch
分支,你可以看到在此分支上新增的檔案。
GitHub
截至目前,我們有兩個分支:一個是 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 程式碼庫[5] 中驗證你的結果。
刪除分支
由於我們增加了兩個分支,下麵刪除其中的一個(myBranch
),包括兩步:
刪除本地分支 你不能刪除正在操作的分支,故切換到 master
分支 (或其它你希望保留的分支),命令及終端輸出如下:
git branch
可以列出可用的分支,使用 checkout
切換到 master
分支,然後使用 git branch -D myBranch
刪除該分支。再次執行 git branch
檢查是否只剩下兩個分支(而不是三個)。
刪除 GitHub 上的分支 使用如下命令刪除 myBranch
的遠端分支:
git push origin :myBranch
Terminal output
上面 push
命令中分支名稱前面的冒號(:
)告知 GitHub 刪除分支。另一種寫法為:
git push -d origin myBranch
其中 -d
(也可以用 --delete
) 也用於告知 GitHub 刪除你的分支。
我們學習了 Git 分支的使用,在本系列的下一篇文章中,我們將介紹如何執行 fetch
和 rebase
操作,對於多人同時的貢獻的專案而言,這是很必須學會的。
via: https://opensource.com/article/18/5/git-branching
作者:Kedar Vijay Kulkarni[7] 選題:lujun9972 譯者:pinewall 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出