git branch
git branch -r, 查看遠端庫的分支情況
git branch -a, 查看所有分支
git branch -vv, 查看當前本地分支與遠程分支的映射關係
git branch, 新建本地分支
$ git checkout -b dev origin/dev
# 遠程分支dev已存在時,用此命令建立本地分支,同時設置tracking映射。
git branch -m | -M old_branch new_branch,重命名分支,如new_branch已存在,則用-M強制重命名。
git branch -d | -D branch_name, 刪除branch_name分支
git branch -d -r branch_name, 刪除遠程branch_name分支
git branch –set-upstream-to=origin/dev [dev],映射本地dev分支與遠程origin/dev分支(如果failed,則先用git pull更新本地的遠程分支信息)
git branch -u origin/dev [dev],同上
git branch [–set-upstream | –track | –no-track] [-l] [-f] branch_name [start-point]
git branch –unset-upstream [branch_name],撤銷本地分支與遠程分支的映射關係
git remote
git remote,查看遠程分支(簡略)
git remote -v,查看遠程分支(詳細)
git push
- git push <遠程主機名> <本地分支名>:<遠程分支名>
git push origin DEV:dev,將本地DEV分支push到遠程主機origin的dev分支上。
git push origin [空]:<遠程分支名>,默認刪除遠程分支,等價於 git branch -d -r <遠程分支名>。
注:即使沒有使用git pull更新本地的遠程分支,都有效。
git push origin –delete DEV,刪除遠程分支DEV
等價於 git push origin [空]:DEV,以及 git branch -d -r DEV
git push origin HEAD:DEV, 將當前本地分支推送到遠程origin的DEV分支(方便易用)
示例
$ git push origin master
將本地master分支推送到origin主機的master分支。如果master不存在,則會被新建。$ git push origin :master
$ git push origin --delete master
刪除origin主機的master分支$ git push -u origin master
將本地的master分支推送到origin主機,同時(-u)指定origin爲默認主機,後面就可以不加任何參數使用git push了,即 git push (本地與遠程分支不同名時,不可用)。git push
不帶任何參數的git push,默認只推送當前分支,這叫做simple方式。
注:單個本地分支可以track多個遠程分支。$ git config --global push.default matching
$ git config --global push.default simple
Git 2.0版本之前,默認採用matching方法,會推送所有有對應的遠程分支的本地分支。
Git 2.0版本之後,默認採用simple方式,只推送當前分支至同名遠程分支(即push your code branch by branch)。$ git push origin HEAD
將當前分支推送到遠程的同名的簡單方法$ git push origin HEAD:master
將當前分支推送到源存儲庫中的遠程引用匹配主機。 這種形式方便推送當前分支,而不考慮其本地名稱。
git pull
取回遠程主機某個分支的更新,再與本地的指定分支合併,它的完整格式稍稍有點複雜。
默認模式下,git pull是git fetch後跟git merge FETCH_HEAD的縮寫。
(Fetch from and integrate with another repository or a local branch)
語法
$ git pull <遠程主機名> <遠程分支名>:<本地分支名>
<本地分支名>可省略,如爲當前分支。$ git branch --set-upstream master origin/next
上面命令指定本地master分支追蹤origin/next分支。$ git pull origin
如果當前分支與遠程分支存在追蹤關係,git pull就可以省略遠程分支名。
上面命令表示,本地的當前分支自動與對應的origin主機”追蹤分支”(remote-tracking branch)進行合併。$ git pull
如果當前分支只有一個追蹤分支,連遠程主機名都可以省略。
上面命令表示,當前分支自動與唯一一個追蹤分支進行合併。$ git pull --rebase <遠程主機名> <遠程分支名>:<本地分支名>
如果合併需要採用rebase模式,可以使用–rebase選項。
注:在實際使用中,git fetch更安全一些,因爲在merge前,我們可以查看更新情況,然後再決定是否合併。
git rebase
git rebase 之後再推送(push),會改變log曲線,按照各個協作者推送的順序來單線排列。
- rebase操作可以把本地未push的分叉提交歷史整理成直線。
- rebase的目的是使得我們在查看歷史提交的變化時更容易,因爲分叉的提交需要三方對比。
git tag
$ git tag tag_name [commit_id]
給指定commit打標籤; 默認標籤打在HEAD最新提交的commit上。$ git tag -a tag_name -m "version xx released" commit_id
創建帶有說明的標籤,用-a指定標籤名,-m指定說明文字。$ git tag
查看tag列表(簡略)。$ git show tag_name
查看某個tag的詳細說明信息。$ git tag -d tag_name
刪除某個標籤(創建的標籤只本地存儲,不自動遠程推送;打錯的標籤可在本地安全刪除)。$ git push origin tag_name
單獨推送某個標籤。$ git push origin --tags
一次性推送全部尚未推送到遠程的本地標籤。
如果某個標籤已經推送到遠程,刪除步驟如下:
$ git tag -d tag_name
, 先從本地刪除。$ git push origin :refs/tags/tag_name
,用push刪除遠程標籤(refs/tags/固定)。
注:標籤總是和某個commit掛鉤。如果此tag關聯的commit既出現在master分支,又出現在dev分支,則兩個分支上都可以看到這個標籤。