git branch 查看本地分支 git branch -a 查看本地分支和遠程分支 git branch -v 查看本地各個分支及最後一個提交對象的信息 git branch -av 查看本地和遠程各個分支及最後一個提交對象的信息 git branch --merged 篩選出已經與當前分支合併的分支(也就是說哪些分支是當前分支的直接上游。) git branch --no-merged 篩選出還沒有與當前分支合併的分支(Git 1.5.6 以上版本)
默認基於當前分支javascript
git branch <BranchName > git checkout <BranchName > git checkout -b <BranchName >指定源分支,git log 與源分支保持一致。java
git checkout -b branch-name <srcBranch > git checkout -b branch-name origin/<srcBranch > git checkout --track origin/<srcBranch > 與上一個命令做用相同,分支名與遠程一致基於本地分支新建的分支,pull 和 push 不能成功:There is no tracking information for the current branch.
基於遠程的,默認關聯到了遠程分支。
git clone下來的倉庫,默認只有master分支,若想要新建與遠程其餘分支對應的分支,使用第二/三條命令git
默認Fast forward,合併某分支到當前分支, 正常無衝突合併完成後,查看當前分支log, 看不出來合併過,只是多了一些提交安全
$ git merge <BranchName>--no-ff參數,表示禁用Fast forward,查看當前分支log, 能夠看出合併過指針
$ git merge --no-ff -m " " <BranchName>生成一條commit log, Merge branch '<BranchName>' into mastercode
衝突狀況orm
手動解決,而後add、commit,手動更改的文件只體如今本分支(master),被合併分支(conflict)內容無變化。conflict merge master 不會再衝突。
本分支log中,當前分支與被合併分支的commit信息按時間排列,最新的是both。解決事後,再去被合併分支merge,無衝突。一般,合併分支時,若是可能,Git會用Fast forward模式,但這種模式下,刪除分支後,會丟掉分支信息。若是要強制禁用Fast forward模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就能夠看出分支信息。對象$ git log --graph --pretty=oneline --abbrev-commit //能夠看合併狀況
重命名本地排序
git branch -m oldbranchname newbranchname重命名遠程分支ip
只能經過先刪除遠程分支,而後重命名本地分支,再從新提交一個遠程分支
刪除本地
$ git branch -d <BranchName> $ git branch -D <BranchName>有新產生的commit沒有在當前分支體現的時候,簡單地用 git branch -d 刪除該分支會提示錯誤,由於那樣作會丟失數據 D強制刪除,git branch --no-merged查看未在當前分支合併的分支。親手實驗結果,branch5 有新的commit以後,合併到branch3,則在branch3下能夠執行刪除branch5,而在branch2下會提示-D。
刪除遠程分支
$ git push origin --delete <BranchName> Git v1.7.0以後 $ git push origin -d <BranchName> $ git push origin :<BranchName> Git v1.7.0以前,推送一個空分支到遠程分支,其實至關於刪除遠程分支
推送分支到遠程
$ git push origin branch-name 把本地分支推送到遠程對應分支,若是該遠程分支不存在,則會被新建 $ git push -u origin branch-name 基於以上,而且創建關聯關係 $ git push origin branch:master 非對應分支推送,本地branch分支推送到遠程master分支 <src>:<dst>創建本地分支和遠程分支的關聯, 體如今 .git/config文件,能夠手動配置
$ git branch --set-upstream branch-name origin/branch-name;push衝突
解決衝突,commit,push. 你的本地commit信息和遠程庫最近更新的commit信息都在,分別顯示基於共同節點的差別,按時間前後排序。 解決衝突後的commit信息,也在。
詳述:
Git把每次提交串成一條時間線,這條時間線就是一個分支。HEAD指向master,master指向提交,因此,HEAD指向的就是當前分支。每次提交,master分支都會向前移動一步,這樣,隨着不斷提交,master分支的線也愈來愈長。當咱們建立新的分支dev時,Git新建了一個指針叫dev,指向master相同的提交,再把HEAD指向dev,就表示當前分支在dev上。Git建立一個分支很快,由於除了增長一個dev指針,改改HEAD的指向,工做區的文件都沒有任何變化!
不過,從如今開始,對工做區的修改和提交就是針對dev分支了,好比新提交一次後,dev指針往前移動一步,而master指針不變。假如咱們在dev上的工做完成了,就能夠把dev合併到master上。Git怎麼合併呢?最簡單的方法,就是直接把master指向dev的當前提交,就完成了合併,fast-forward。因此Git合併分支也很快!就改改指針,工做區內容也不變!合併完分支後,甚至能夠刪除dev分支。刪除dev分支就是把dev指針給刪掉,刪掉後,咱們就剩下了一條master分支。真是太神奇了,你看得出來有些提交是經過分支完成的嗎?
注意到合併成功後的Fast-forward信息,Git告訴咱們,此次合併是「快進模式」,也就是直接把master指向dev的當前提交,因此合併速度很是快。由於建立、合併和刪除分支很是快,因此Git鼓勵你使用分支完成某個任務,合併後再刪掉分支,這和直接在master分支上工做效果是同樣的,但過程更安全。