git分支的原理就不講了,可以看看Git使用手冊3 —— Git 分支(上).本文對分支常用的命令進行了增刪查改的總結.
增 (新建分支)
- 創(chuàng)建一個分支
$ git branch testing
- 創(chuàng)建完成后并不會將HEAD指針切換到新分支上,需要checkout操作,然后再提交,就是在新分支上操作了
$ git checkout testing
- 上面兩步操作合并簡寫,新建分支,并將本地HEAD切換到新分支上
$ git checkout -b testing
它是下面兩條命令的簡寫:
$ git branch testing
$ git checkout testing
- 推送到遠端,origin沒有什么特殊含義,只是我們遠程倉庫的名字,通常默認為origin
$ git push origin testing
如果遠端上的分支名字不一樣,我們可以進行本地到遠端的映射
$ git push origin testing:awesomebranch
- 追蹤一個遠端分支,并給你一個用于工作的本地分支,起點位于
origin/serverfix
1. 原始方式
$ git checkout -b serverfix origin/serverfix
2. 快捷方式 --track 推薦使用
$ git checkout --track origin/serverfix
3. 本地分支別名,感覺沒什么卵用
$ git checkout -b sf origin/serverfix
刪 (刪除分支)
- 當一個臨時分支使用完成后(
idea
,hotfix
,bug01
)應該刪除這個分支.
$ git branch -d hotfix
error: The branch 'hotfix' is not fully merged.
If you are sure you want to delete it, run 'git branch -D hotfix'.
意思是分支沒有合并,但可以使用大寫的D強制刪除
$ git branch -D hotfix
- 刪除遠端的分支
$ git push origin --delete hotfix
- 當前分支徹底回退到某個版本,本地的源碼也會變?yōu)樯弦粋€版本的內容
$ git reset --hard 版本號的sha1
查 (分支狀態(tài))
- 查看當前所在分支狀態(tài)的提交歷史
$ git log --oneline --decorate
- 查看所有的分支提交歷史
git log --oneline --decorate --graph --all
- 查看所有的分支,分支前的 * 字符:它代表現(xiàn)在檢出的那一個分支
$ git branch -v
- 查看哪些分支(已經/尚未)合并到當前分支
$ git branch --merged
$ git branch --no-merged
- 遠程分支列表
$ git ls-remote
改 (提交分支)
合并 merge
- 在主線上進行合并操作,選中一個需要合并進來的分支的節(jié)點
$ git checkout master
$ git merge hotfix
Updating f42c576..3a0874c
Fast-forward
在合并的時候形纺,你應該注意到了"快進(fast-forward)"這個詞。如果順著一個分支走下去能夠到達另一個分支前标,那么 Git 在合并兩者的時候梳玫,只會簡單的將指針向前推進(指針右移)扬蕊,因為這種情況下的合并操作沒有需要解決的分歧——這就叫做 “快進(fast-forward)”。
簡單的說,你主線合并操作節(jié)點,是合并進來分支的super指針.那么就將兩條分支串聯(lián)起來.類似于變基
變基
編輯的主要作用是將合并操作的分支,整潔化到原始分支上面.看起來更清爽,但是隱藏了怎么合并的過程.需要查看日志來看看真實的記錄.
不要對在你的倉庫外有副本的分支執(zhí)行變基怕享。 也就是說,不要變基公用的(release,develop等)分支,只用來整理自己的提交記錄.
如果你已經將提交推送至某個倉庫,而其他人也已經從該倉庫拉取提交并進行了后續(xù)工作镰踏,此時函筋,如果你用 git rebase 命令重新整理了提交并再次推送,你的同伴因此將不得不再次將他們手頭的工作與你的提交進行整合奠伪,如果接下來你還要拉取并整合他們修改過的提交跌帐,事情就會變得一團糟。
- 切換到子線,將變化變基到自己的主線上
$ git checkout experiment
$ git rebase bug001
- 回到 bug001 ,進行一次快速合并
$ git checkout bug001
$ git merge experiment