分支就是一條獨立的時間線,既有分支,必有主幹,正如一棵樹談到樹枝,必有樹幹同樣的道理.咱們先前對git
的所有操做默認都是在主幹上進行的,這個主幹也是一種特殊的分支,名爲 master
分支.html
不管是穿越歷史仍是撤銷更改,咱們都或多或少接觸過期間線,git
管理的版本串在一塊兒就組成了這個時間線,其中master
分支是當前分支,HEAD
指向master
,所以HEAD
至關於指向了最新的版本.git
基於分支上的操做,每一次 commit
都會提交一個新版本,而且新的 commit
指向原來的 commit
,這來最新的 commit
就能夠往前找,直到找到最初的commit
.這就是 git
的時間線.github
當咱們打算開闢新的時間線時,git
在當前 HEAD
指向的 master
分支的 commit
處新建一個 dev
分支.若是主角沒有主動進入時間線的話,那麼仍然處於 master
分支,進入的方法就是 HEAD
指向新建的 dev
分支.spa
不考慮孫悟空的分身特效,主角不能同時處於不一樣的時空下,git
也是如何,HEAD
只能指向某一個 commit
,既然剛剛已經指向了 dev
分支,因此原來的 master
分支就沒有 HEAD
了,由於至關於master
分支靜止了.3d
當主角在 dev
分支獨自闖蕩幹出一番事業時,決定回到故鄉 master
分支,並將出門在外所學的本領帶回家鄉,建設美好家園.master
分支由於合併了 dev
分支,因此一會兒增添了不少內容,家鄉面目一新!code
主角此次攜帶 dev
分支歸來,HEAD
分支天然又回到了 master
分支上,年輕的心向往外面的世間,相信不久後還會有一樣的故事發生...htm
下面詳解分支相關命令blog
建立 dev
分支,列出分支已驗證是否建立成功開發
# 建立分支 $git branch dev # 列出分支 $ git branch dev * master $
*master
前面的 * 標記代表當前仍然處於master
分支
切換到新分支以便在分支上開展工做rem
# 切換分支 $ git checkout dev Switched to branch 'dev' # 列出分支 $ git branch * dev master $
如今,咱們在 dev
分支上奮筆疾書,前後提交兩個版本後完成分支開發工做:
# 查看當前文件列表 $ ls LICENSE README.md test.txt # 查看目標文件內容 $ cat test.txt add test.txt see https://snowdreams1006.github.io/git/usage/remote-repository.html # 第一個版本: learn git branch $ echo "learn git branch" >> test.txt $ git add test.txt $ git commit -m "learn git branch" [dev 9c30e50] learn git branch 1 file changed, 1 insertion(+) # 第二個版本: see https://snowdreams1006.github.io/git/usage/branch-overview.html $ echo "see https://snowdreams1006.github.io/git/usage/branch-overview.html" >> test.txt $ git add test.txt sunpodeMacBook-Pro:git-demo sunpo$ git status On branch dev Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: test.txt $ git commit -m "see https://snowdreams1006.github.io/git/usage/branch-overview.html" [dev 413a4d1] see https://snowdreams1006.github.io/git/usage/branch-overview.html 1 file changed, 1 insertion(+)
此時,再從 dev
分支切換回 master
分支,合併dev
分支前看一下當前文件內容:
# 切換回 master 分支 $ git checkout master Switched to branch 'master' Your branch is up to date with 'origin/master'. sunpodeMacBook-Pro:git-demo sunpo$ git status On branch master Your branch is up to date with 'origin/master'. nothing to commit, working tree clean # 查看當前文件列表 $ ls LICENSE README.md test.txt # 查看文件內容: 無 dev 分支更改 $ cat test.txt add test.txt see https://snowdreams1006.github.io/git/usage/remote-repository.html $
切換回 master
分支並無咱們在 dev
分支的更改,由於兩條時間線是獨立的,如今合併 dev
分支,再看一下當前文件內容:
# 合併 dev 分支 $ git merge dev Updating b3d8193..413a4d1 Fast-forward test.txt | 2 ++ 1 file changed, 2 insertions(+) # 查看文件內容: 已經存在 dev 分支的更改! $ cat test.txt add test.txt see https://snowdreams1006.github.io/git/usage/remote-repository.html learn git branch see https://snowdreams1006.github.io/git/
合併分支後,dev
分支的歷史使命已經完成,應該及時清空沒必要要分支.
# 刪除 dev 分支 $ git branch -d dev Deleted branch dev (was 413a4d1). # 列出當前分支: 只剩下 master 分支 $ git branch * master $
以上場景包括了分支的經常使用操做,建立分支(git branch <name>
),切換分支(git checkout <name>
),刪除分支(git branch -d <name>
)一系列操做十分流暢,所以 git
鼓勵咱們大量使用分支!
git branch
git branch <name>
git checkout <name>
git checkout -b <name>
git merge <name>
git branch -d <name>