1. 程式人生 > >git 入門教程之分支總覽

git 入門教程之分支總覽

cef 最新 readme.md ogr -m 使用 fas mit hang

分支就是一條獨立的時間線,既有分支,必有主幹,正如一棵樹談到樹枝,必有樹幹一樣的道理.我們先前對git 的全部操作默認都是在主幹上進行的,這個主幹也是一種特殊的分支,名為 master 分支.

無論是穿越歷史還是撤銷更改,我們都或多或少接觸過時間線,git 管理的版本串在一起就組成了這個時間線,其中master 分支是當前分支,HEAD 指向master ,因此HEAD 相當於指向了最新的版本.

技術分享圖片

基於分支上的操作,每一次 commit 都會提交一個新版本,並且新的 commit 指向原來的 commit,這來最新的 commit 就可以往前找,直到找到最初的commit.這就是 git

的時間線.

當我們打算開辟新的時間線時,git 在當前 HEAD 指向的 master 分支的 commit 處新建一個 dev 分支.如果主角沒有主動進入時間線的話,那麽仍然處於 master 分支,進入的方法就是 HEAD指向新建的 dev 分支.

不考慮孫悟空的分身特效,主角不能同時處於不同的時空下,git 也是如何,HEAD 只能指向某一個 commit ,既然剛剛已經指向了 dev 分支,所以原來的 master 分支就沒有 HEAD 了,因為相當於master 分支靜止了.

當主角在 dev 分支獨自闖蕩幹出一番事業時,決定回到故鄉 master 分支,並將出門在外所學的本領帶回家鄉,建設美好家園.master

分支因為合並了 dev 分支,所以一下子增添了很多內容,家鄉煥然一新!

主角這次攜帶 dev 分支歸來,HEAD 分支自然又回到了 master 分支上,年輕的心向往外面的世間,相信不久後還會有同樣的故事發生...

技術分享圖片

下面詳解分支相關命令

創建分支

創建 dev 分支,列出分支已驗證是否創建成功

# 創建分支
$git branch dev
# 列出分支
$ git branch
  dev
* master
$

* master 前面的 * 標記表明當前仍然處於 master 分支

技術分享圖片

切換分支

切換到新分支以便在分支上開展工作

# 切換分支
$ 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-www.ysgj1688.com demo sunpo$ git status
On branch master
Your branch is up to date with www.dasheng178.com‘origin/master‘.

nothing to commit, working tree clean
# 查看當前文件列表
$ ls
LICENSE     README.md   test.txt
# 查看文件內容: 無 dev 分支更改
$ cat test.txt
add test.txt
see https://www.fengshen157.com snowdreams1006.github.io/git/usage/remote-repository.html
$

技術分享圖片

合並分支

切換回 master 分支並沒有我們在 dev 分支的更改,因為兩條時間線是獨立的,現在合並 dev 分支,再看一下當前文件內容:

# 合並 dev 分支
$ git merge dev
Updating b3d8193..413a4d1
Fast-forward
 test.txt |www.qcaphb.com 2 ++
 1 file changed, 2 insertions(www.michenggw.com)
# 查看文件內容: 已經存在 dev 分支的更改!
$ cat test.txt
add test.txt
see https://www.xintiandiyule1.com/ snowdreams1006.github.io/ www.meiwanyule.cn git/usage/remote-repository.html
learn git branch
see https://www.ysyl157.com snowdreams1006.www.suoLaieyuLe.com 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>

git 入門教程之分支總覽