本地分支 和 branch 命令
Git 鼓勵(lì)開發(fā)者頻繁使用分支,正是因?yàn)橛兄@些特性作保障。Git 是如何知道你當(dāng)前在哪個(gè)分支上工作的呢?其實(shí)答案也很簡單,它保存著一個(gè)名為 HEAD 的特別指針。(譯注:將 HEAD 想象為當(dāng)前分支的別名。)
$ git branch [branch-name] 創(chuàng)建新的分支
$ git branch [-r | --track] [本地分支名] [遠(yuǎn)程倉庫名]/[遠(yuǎn)程分支名] 創(chuàng)建追蹤分支
$ git branch 查看所有分支
$ git branch -a 查看當(dāng)前的版本庫當(dāng)中有哪些分支, 包含遠(yuǎn)程倉庫的所有分支
$ git branch -r 僅看所有遠(yuǎn)程分支
$ git branch -v 要查看各個(gè)分支最后一個(gè)提交對(duì)象的信息 (譯注:此為 --verbose 的簡寫,取首字母)
$ git branch -vv 查看當(dāng)前的本地分支與遠(yuǎn)程分支的關(guān)聯(lián)關(guān)系
$ git branch --merge
查看哪些分支已被并入當(dāng)前分支(譯注:也就是說哪些分支是當(dāng)前分支的直接上游。一般來說,列表中沒有 * 的分支通常都可以用 git branch -d 來刪掉。原因很簡單,既然已經(jīng)把它們所包含的工作整合到了其他分支,刪掉也不會(huì)損失什么。
$ git branch --no-merged 查看尚未合并的工作,它會(huì)顯示還未合并進(jìn)來的分支。由于這些分支中還包含著尚未合并進(jìn)來的工作成果,所以簡單地用 git branch -d 刪除該分支會(huì)提示錯(cuò)誤,因?yàn)槟菢幼鰰?huì)丟失數(shù)據(jù), 過,如果你確實(shí)想要?jiǎng)h除該分支上的改動(dòng),可以用大寫的刪除選項(xiàng) -D 強(qiáng)制執(zhí)行
一般當(dāng)前本地分支前帶有“*”號(hào)且為綠色,遠(yuǎn)程分支為紅色
當(dāng)合并分支時(shí),如果可能,Git 會(huì)用 Fast forward 模式,但這種模式下,刪除分支后,會(huì)丟掉分支信息。
如果要強(qiáng)制禁用 Fast forward 模式,Git 就會(huì)在 merge 時(shí)生成一個(gè)新的 commit。
例如 $ git merge --no-ff -m "merge with no-ff" dev
git branch (-m | -M) [<oldbranch>] <newbranch> 移動(dòng)分支/重命名
git branch (-c | -C) [<oldbranch>] <newbranch> 拷貝分支
git branch (-d | -D) [-r] <branchname>... 刪除分支
給本地分支改名 git branch -m 原分支名 新分支名, 若修改當(dāng)前所在分支的名字,原分支名可以省略不寫。
本地分支的復(fù)制
-C 表示 --force 強(qiáng)制的意思。
本地分支的刪除
$ git branch -d <branch-name> 刪除分支,此命令也一次性刪除多個(gè),只需要一并列出就行。另外 Git 阻止你刪除當(dāng)前分支。因?yàn)閯h除當(dāng)前分支將導(dǎo)致Git無法確定工作目錄樹應(yīng)該是什么樣的。相反,必須始終選擇一個(gè)非當(dāng)前分支。
但是還有另外一個(gè)微妙的問題。Git 不會(huì)讓你刪除一個(gè)包含不存在于當(dāng)前分支中的提交的分支。也就是說,如果分支被刪除則開發(fā)的提交部分就會(huì)丟失, Git 會(huì)阻止你意外刪除提交中的開發(fā)。
最后,正如錯(cuò)誤消息提示的,可以通過使用 -D 而不是-d來覆蓋 Git 的安全檢查。只有你確定不需要該分支額外的內(nèi)容時(shí)才可以這樣做。
$ git branch -D <branch-name> 強(qiáng)制刪除該分支 ,此命令也一次性刪除多個(gè),只需要一并列出就行。
創(chuàng)建并切換到該分支
git checkout -b [branch-name]
相當(dāng)于
git branch [branch-name]
git checkout [branch-name]
分離 HEAD 分支
通常情況下,通過直接指出分支名來檢出分支的頭部是明智的。因此,默認(rèn)情況下, git checkout 會(huì)改變期望的分支的頭部。
然而,可以檢出任何提交。在這樣的情況下, Git 會(huì)自動(dòng)創(chuàng)建一種匿名分支,稱為一個(gè)分離的 HEAD (detached HEAD) 。在下面的情況下, Git 會(huì)創(chuàng)建一個(gè)分離的 HEAD.
如果你發(fā)現(xiàn)自己在一個(gè)分離的頭部,然后你決定在該點(diǎn)用新的提交留住它們,那么你必須首先創(chuàng)建一個(gè)新分支:
git checkout-b new_branch
遠(yuǎn)程倉庫/分支和 remote
遠(yuǎn)程分支(remote branch)是對(duì)遠(yuǎn)程倉庫中的分支的索引。它們是一些無法移動(dòng)的本地分支;只有在 Git 進(jìn)行網(wǎng)絡(luò)交互時(shí)才會(huì)更新。遠(yuǎn)程分支就像是書簽,提醒著你上次連接遠(yuǎn)程倉庫時(shí)上面各分支的位置.
查看當(dāng)前配置有哪些遠(yuǎn)程倉庫詳細(xì)信息 git remote [-v | --verbose]
添加遠(yuǎn)程倉庫 git remote add [remote-name] [url]
查看遠(yuǎn)程倉庫所有信息 git remote show [remote-name]
遠(yuǎn)程倉庫配置的重命名 git remote rename [old-name] [new-name]
刪除遠(yuǎn)程倉庫 git remote rm [remote-name]
調(diào)整你的url git remote set-url origin git@github.com:someaccount/someproject.git
git remote update 更新所有的 remote
git remote update remote_name 使得本地版本庫中的 origin 已被基于遠(yuǎn)程版本庫的信息更新了。當(dāng)最初添加遠(yuǎn)程版本庫時(shí),使用 -f 選項(xiàng)將導(dǎo)致立即對(duì)該遠(yuǎn)程版本庫執(zhí)行 fetch 操作。
git remote rm命令會(huì)從你的本地版本庫中刪除給定的遠(yuǎn)程版本庫及其關(guān)聯(lián)的遠(yuǎn)程追蹤分支。要只從你的本地版本庫刪除一個(gè)遠(yuǎn)程跟蹤分支,使用這樣的命令:
$ git branch-r -d origin/dev
遠(yuǎn)程版本庫中可能已經(jīng)有分支被其他開發(fā)人員刪除了(即使這些分支的副本可能還遺留在你的版本庫中) 。 git remote prune命令可以用來刪除你的本地版本庫中那些陳舊的(相對(duì)于實(shí)際的遠(yuǎn)程版本庫)遠(yuǎn)程追蹤分支。
為了與上游遠(yuǎn)程版本庫更加同步,使用git remote update --prune remote命令首先從遠(yuǎn)程版本庫獲得更新,然后一步刪除陳舊的追蹤分支。
創(chuàng)建跟蹤分支
分支類別細(xì)分:
- 遠(yuǎn)程追蹤分支(remote-tracking branch)與遠(yuǎn)程版本庫相關(guān)聯(lián),專門用來追蹤遠(yuǎn)程版本庫中每個(gè)分支的變化。
- 本地追蹤分支(local-tracking branch)與遠(yuǎn)程追蹤分支相配對(duì)。它是一種集成分支,用于收集本地開發(fā)和遠(yuǎn)程追蹤分支中的變更。
- 任何本地的非追蹤分支通常稱為特性(topic)或開發(fā)(development)分支。
本地已有分支添加追蹤
使用 --set-upstream
git branch --set-upstream <local-branch-name> <remote-name>/<branch>
新版本中 --set-upstream 已經(jīng)過時(shí),一般使用 --set-upstream-to 代替
使用 --set-upstream-to
$ git branch --set-upstream-to=遠(yuǎn)程主機(jī)名/分支名 本地分支名
或者使用 -u 簡寫
$ git branch -u 主機(jī)名/遠(yuǎn)程分支名 本地分支名
說明:
1.-u 是 --set-upstream-to 的縮寫;
- 最后一個(gè)參數(shù)本地分支名可以省略不寫。
撤銷該分支對(duì)遠(yuǎn)程分支的跟蹤
git branch --unset-upstream 【分支名】
如果你還未創(chuàng)建該分支,為了創(chuàng)建跟蹤遠(yuǎn)程分支并切換到該分支,可以使用:
$ git checkout -b [本地分支名] [遠(yuǎn)程名]/[分支名]
如果你有 1.6.2 以上版本的 Git,也可使用 -t, --track 選項(xiàng):
# 如果本地分支名 和 遠(yuǎn)程分支名 不一致的話,則都需要單獨(dú)寫出來
$ git checkout -b [本地分支名] --track [遠(yuǎn)程倉庫名]/[遠(yuǎn)程分支名]
# 創(chuàng)建本地同名追蹤分支
$ git checkout --track [遠(yuǎn)程倉庫名]/[遠(yuǎn)程分支名]
從遠(yuǎn)程跟蹤分支 checkout 出來的本地分支,稱為 跟蹤分支。跟蹤分支是一種和某個(gè)遠(yuǎn)程分支有直接聯(lián)系的本地分支。在跟蹤分支里輸入 git push,Git 會(huì)自行推斷應(yīng)該向哪個(gè)服務(wù)器的哪個(gè)分支推送數(shù)據(jù)。同樣,在這些分支里運(yùn)行 git pull 會(huì)獲取所有遠(yuǎn)程索引,并把它們的數(shù)據(jù)都合并到本地分支中來。
你應(yīng)該會(huì)發(fā)現(xiàn),在上面應(yīng)該不止一次見過 --set-upstream-to 這個(gè)詞了,這個(gè) upstream 到底是什么呢?
upstream & downstream 的概念
git 中存在 upstream 和 downstream,簡言之,當(dāng)我們把倉庫A中某分支x的代碼push到倉庫B分支y,此時(shí)倉庫B的這個(gè)分支y就叫做A中 x 分支的 upstream,而 x 則被稱作 y 的downstream,這是一個(gè)相對(duì)關(guān)系,每一個(gè)本地分支都相對(duì)地可以有一個(gè)遠(yuǎn)程的 upstream 分支(注意這個(gè) upstream 分支可以不同名,但通常我們都會(huì)使用同名分支作為upstream)。
克隆分支 clone
$ git clone <repo>
$ git clone --bare <repo> 克隆裸倉庫
$ git clone <repo> <directory> 克隆到指定的目錄
$ git clone --depth 10 git_倉庫_url 只會(huì)獲取最近 xx(10條提交記錄的)代碼,默認(rèn)是master分支, 如果想要指定分支,可以結(jié)合 -b --single--branch 使用!
clone 特定分支
$ git checkout -b mvp-dev-more remotes/origin/mvp-dev-more
其中mvp-dev-more是本地倉庫名字。remotes/origin/mvp-dev-more可以省略為origin/mvp-dev-more
clone 單一分支
git clone -b git_分支名稱 --single-branch git_倉庫_url 獲取指定分支的代碼
舉例
$ git clone -b dev --single-branch http://117.50.94.123/be/preser-customer.git
分支合并策略一 merge
在開始合并之前, 雖然不必從干凈的目前啟動(dòng)合并,但是最好整理一下工作目錄。在正常合并結(jié)束的時(shí)候, Git 會(huì)創(chuàng)建新版本的文件并把它們放到工作目錄中。此外, Git 在操作的時(shí)候還用索引來存儲(chǔ)文件的中間版本。
如果已經(jīng)修改了工作目錄中的文件,或者已經(jīng)通過 git add 或 git rm 修改了索引,那么版本庫里就已經(jīng)有了一個(gè)臟的工作目錄或者索引。如果在臟的狀態(tài)下開始合并, Git可能無法一次合并所有分支及工作目錄或索引的的修改。
由于git merge操作是區(qū)分上下文的。當(dāng)前分支始終是目標(biāo)分支
$ git merge [other_branch]
合并兩個(gè)不相關(guān)的分支 加上參數(shù) --allow-unrelated-histories
默認(rèn)情況下, git 合并命令拒絕合并沒有共同祖先的歷史。當(dāng)兩個(gè)項(xiàng)目的歷史獨(dú)立地開始時(shí),這個(gè)選項(xiàng)可以被用來覆蓋這個(gè)安全。由于這是一個(gè)非常少見的情況,因此沒有默認(rèn)存在的配置變量,也不會(huì)添加。
git checkout master
git merge bugFix
等價(jià)于
git merge bugFix master
在合并中產(chǎn)生沖突是不可避免的事情,但是 git 會(huì)給出友好的提示信息??梢允褂?code>git status 或 git ls-files -u 查看未完成合并狀態(tài)的文件。也可以用 git diff 查看未完成的工作區(qū)的內(nèi)容。
分支合并策略二 rebase
git rebase 命令是用來改變一串提交以什么為基礎(chǔ)的。此命令至少需要提交將遷往的分支名。
git rebase 的一個(gè)常見用途是保持你正在開發(fā)的一系列提交相對(duì)于另一個(gè)分支是最新的, 那通常是 master 分支或者來自另一個(gè)版本庫的追蹤分支。
命令會(huì)先取出特性分支 server,然后在主分支 master 上重演。
git rebase [主分支] [特性分支]
當(dāng)前分支可以git rebase [主分支], 省略了當(dāng)前特性分支而已。
舉例:將 bugFix 的東西重新在上 master 演繹,和 merge 一樣,改動(dòng)的是 bugFix 分支。
git checkout bugFix
git rebase master
等價(jià)于
# 遷往的分支名是 master (變的是 master), 最后一個(gè)參數(shù)不寫缺省是 HEAD
git rebase master bugFix
這樣 bugFix 分支已經(jīng)向前移植到了master分支。
git rebase命令也可以用 --onto 選項(xiàng)把一條分支上的開發(fā)線整個(gè)移植到完全不同的分支上。
fetch 命令
fetch 命令只是將遠(yuǎn)端的數(shù)據(jù)拉到本地倉庫,并不會(huì)自動(dòng)合并到當(dāng)前工作分支,只有當(dāng)你確實(shí)準(zhǔn)備好了,才能手工合并。
如果只想取回特定分支的更新,可以指定分支名
$ git fetch <遠(yuǎn)程主機(jī)名> <分支名>
將某個(gè)遠(yuǎn)程主機(jī)的更新
$ git fetch <遠(yuǎn)程主機(jī)名>
由于沒有指定 refspec,該遠(yuǎn)程版本庫的信息在配置文件中,Git會(huì)使用 remote 條目中所有"fetch ="的行。因此,將抓取遠(yuǎn)程版 本庫中的每個(gè)refs/heads/分支。
[remote "origin"]
...
fetch = +refs/heads/*:refs/remotes/origin/*
...
要更新所有分支,命令可以簡寫為:
$ git fetch
舉例:將遠(yuǎn)程版本庫上的修改同步到本地 git fetch origin master 會(huì)將遠(yuǎn)程版本庫上的代碼同步到本地,不過同步下來的代碼并不會(huì)合并到任何分支上去,而是會(huì)存放在到一個(gè) origin/master 分支上,這時(shí)我們可以通過 diff 命令來查看遠(yuǎn)程版本庫上到底修改了哪些東西:
git diff origin/master
# 之后再調(diào)用 merge 命令將 origin/master 分支上的修改合并到主分支上即可:
git merge origin/master`
合并遠(yuǎn)程分支 pull
git pull 操作有兩個(gè)根本步驟,每個(gè)步驟都由獨(dú)立的 Git 命令實(shí)現(xiàn)。也就是說, git pull意味著先執(zhí)行 git fetch, 然后執(zhí)行 git merge 或 git rebase ,默認(rèn)情況下,第二個(gè)步驟是merge,因?yàn)檫@始終是大多數(shù)情況下期望的行為。
因?yàn)槔?pull)操作還進(jìn)行 merge 或 rebase 步驟,所以 git push 和 git pull 不被視為 是相對(duì)的。相反, git push和 git fetch 被認(rèn)為是相對(duì)的。推送(push)和抓取(fetch)都負(fù)責(zé)在版本庫之間傳輸數(shù)據(jù),但方向相反。
命令格式:
$ git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>
比如,取回origin主機(jī)的 next 分支,與本地的 master 分支合并,需要寫成下面這樣。
$ git pull origin next:master
如果遠(yuǎn)程分支是與當(dāng)前分支合并,則冒號(hào)后面的部分可以省略。
git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>
例如git pull origin next
上面命令表示,取回 origin/next分支,再與當(dāng)前分支合并
$ git fetch origin
# 或者完全指定 $ git merge refs/remotes/origin/next
$ git merge origin/next
如果設(shè)置了某個(gè)分支用于跟蹤某個(gè)遠(yuǎn)端倉庫的分支, git pull,目的都是要從原始克隆的遠(yuǎn)端倉庫中抓取數(shù)據(jù)后,合并到工作區(qū)中的當(dāng)前分支??梢灾苯?/p>
git pull
實(shí)際上,在直接使用 git pull 的時(shí)候,如果我們沒有指定 upstream,git 會(huì)根據(jù)配置文件知道怎么合并分支。
[branch "develop"]
remote = origin
merge = refs/heads/develop
這里解讀下,當(dāng) develop 分支是當(dāng)前檢出的分支時(shí),使用origin作為fetch (或pull)操作過程中獲取更新的默認(rèn)遠(yuǎn)程版本庫。此外,在git pull 的 merge步驟中,用遠(yuǎn)程版本庫中的 refs/heads/develop 作為默認(rèn)分支合并到 develop 分支。
也可通過命令行設(shè)置:git config branch.develop.merge refs/heads/develop
這樣當(dāng)我們?cè)?develop 分支 git pull 時(shí),如果沒有指定 upstream分支,git將根據(jù)我們的 config文件去 merge origin/develop;如果指定了upstream分支,則會(huì)忽略config中的 merge 默認(rèn)配置。
如果合并需要采用rebase模式,可以使用--rebase選項(xiàng)。
$ git pull --rebase <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>
如果遠(yuǎn)程主機(jī)刪除了某個(gè)分支,默認(rèn)情況下,git pull 不會(huì)在拉取遠(yuǎn)程分支的時(shí)候,刪除對(duì)應(yīng)的本地分支。這是為了防止,由于其他人操作了遠(yuǎn)程主機(jī),導(dǎo)致git pull不知不覺刪除了本地分支。
但是,你可以改變這個(gè)行為,加上參數(shù) -p 就會(huì)在本地刪除遠(yuǎn)程已經(jīng)刪除的分支。
$ git pull -p
# 等同于下面的命令
$ git fetch --prune origin
$ git fetch -p
推送數(shù)據(jù)到遠(yuǎn)程倉庫 push
git push [遠(yuǎn)程名] [本地分支]:[遠(yuǎn)程分支]
只有一個(gè)源的推送是源和目標(biāo)引用使用同名的簡寫。以下三者等價(jià)。如果目標(biāo)分支不存在則會(huì)創(chuàng)建。
git push [upstream] [分支名]
git push [upstream] [分支名]:[分支名]
git push [upstream] [分支名]:refs/heads/[分支名]
推送刪除遠(yuǎn)程分支,你會(huì)發(fā)現(xiàn)源分支被省略了,那就等于是在說“在這里提取空白然后把它變成[遠(yuǎn)程分支]”)
git push [upstream] :[分支名]
如果不喜歡:branch的形式,可以使用語法上等價(jià)的形式(--delete):
$ git push upstream --delete [分支名]
如果當(dāng)前分支與遠(yuǎn)程分支之間存在追蹤關(guān)系,則本地分支和遠(yuǎn)程分支都可以省略。
git push origin
如果當(dāng)前分支未設(shè)置過跟蹤遠(yuǎn)程分支,則需要手動(dòng)指定一次 -u 參數(shù)。
git push -u origin dev
否則在推送前需要 git branch -u 主機(jī)名/遠(yuǎn)程分支名 本地分支名 設(shè)置追蹤。
如果主機(jī)名只有一個(gè),則主機(jī)名都可以省略。
git push
關(guān)于直接使用 git push 的說明。
因?yàn)樵?a target="_blank">git的全局配置中,有一個(gè)push.default屬性,其決定了git push操作的默認(rèn)行為。在Git 2.0之前,這個(gè)屬性的默認(rèn)被設(shè)為'matching',2.0之后則被更改為了'simple'。
push.default 有以下幾個(gè)可選值:
nothing, current, upstream, simple, matching
其用途分別為:
- nothing - push操作無效,除非顯式指定遠(yuǎn)程分支,例如git push origin develop(我覺得。。??梢越o那些不愿學(xué)git的同事配上此項(xiàng))。
- current - push當(dāng)前分支到遠(yuǎn)程同名分支,如果遠(yuǎn)程同名分支不存在則自動(dòng)創(chuàng)建同名分支。
- upstream - push當(dāng)前分支到它的upstream分支上(這一項(xiàng)其實(shí)用于經(jīng)常從本地分支push/pull到同一遠(yuǎn)程倉庫的情景,這種模式叫做central workflow)。
- simple - simple和upstream是相似的,只有一點(diǎn)不同,simple必須保證本地分支和它的遠(yuǎn)程 upstream分支同名,否則會(huì)拒絕push操作。
- matching - push所有本地和遠(yuǎn)程兩端都存在的同名分支。
因此如果我們使用了git2.0之前的版本,push.default = matching,git push后則會(huì)推送當(dāng)前分支代碼到遠(yuǎn)程分支,而2.0之后,push.default = simple,如果沒有指定當(dāng)前分支的upstream分支,就會(huì)收到 fatal 提示。
將本地的所有分支都推送到遠(yuǎn)程主機(jī),這時(shí)需要使用–all選項(xiàng)。
$ git push --all origin
上面命令表示,將所有本地分支都推送到origin主機(jī)。
如果遠(yuǎn)程主機(jī)的版本比本地版本更新,推送時(shí)Git會(huì)報(bào)錯(cuò),要求先在本地做git pull合并差異,然后再推送到遠(yuǎn)程主機(jī)。這時(shí),如果你一定要推送,可以使用--force選項(xiàng)。
$ git push --force origin
上面命令使用--force選項(xiàng),結(jié)果導(dǎo)致遠(yuǎn)程主機(jī)上更新的版本被覆蓋。除非你很確定要這樣做,否則應(yīng)該盡量避免使用--force選項(xiàng)。
分支如何重命名,目前沒有一個(gè)一步到位的方法,分兩步走。新增新分支,刪除舊分支
$ git branch new origin/older
$ git push origin new
$ git push origin :older
tag標(biāo)簽
Git 使用的標(biāo)簽有兩種類型:輕量級(jí)的(lightweight)和含附注的(annotated)。
- 輕量級(jí)標(biāo)簽, 就像是個(gè)不會(huì)變化的分支,實(shí)際上它就是個(gè)指向特定提交對(duì)象的引用。
- 附注標(biāo)簽,實(shí)際上是存儲(chǔ)在倉庫中的一個(gè)獨(dú)立對(duì)象,它有自身的校驗(yàn)和信息,包含著標(biāo)簽的名字,電子郵件地址和日期,以及標(biāo)簽說明,標(biāo)簽本身也允許使用 GNU Privacy Guard (GPG) 來簽署或驗(yàn)證。一般我們都建議使用含附注型的標(biāo)簽,以便保留相關(guān)信息;當(dāng)然,如果只是臨時(shí)性加注標(biāo)簽,或者不需要旁注額外信息,用輕量級(jí)標(biāo)簽也沒問題。
查看所有標(biāo)簽
$ git tag
$ git tag -l 'v1.4.2.*'用特定的搜索模式列出符合條件的標(biāo)簽
創(chuàng)建輕量標(biāo)簽
git tag <name>
用于新建一個(gè)標(biāo)簽,默認(rèn)為 HEAD,也可以指定一個(gè)commit id
例如指定commit id,為后期加注標(biāo)簽的:git tag v0.9 6d9ea3
創(chuàng)建一個(gè)含附注類型的標(biāo)簽 git tag -a v1.4 -m 'my version 1.4
用 -a (譯注:取 annotated 的首字母)指定標(biāo)簽名字即可
-m 選項(xiàng)則指定了對(duì)應(yīng)的標(biāo)簽說明,Git 會(huì)將此說明一同保存在標(biāo)簽對(duì)象中)
用PGP簽名標(biāo)簽
git tag -s <tagname> -m "blablabla..."
查看相應(yīng)標(biāo)簽的版本信息
git show <tagname>
舉例:
$ git show v0.9
commit 622493706ab447b6bb37e4e2a2f276a20fed2ab4
Author: Brian
Date: Thu Aug 22 11:22:08 2013 +0800
add merge
推送單個(gè)標(biāo)簽
$ git push origin [tagname]
推送所有本地新增的標(biāo)簽
$ git push origin --tags
刪除一個(gè)本地標(biāo)簽
$ git tag -d <tagname>
刪除一個(gè)遠(yuǎn)程標(biāo)簽,與刪除遠(yuǎn)程倉庫類似
$ git push origin :refs/tags/<tagname>
可以簡寫為
$ git push origin :<tagname>
舉例
$ git tag -d v0.9
$ git push origin :refs/tags/v0.9
git同步遠(yuǎn)程已刪除的分支
使用 git remote show origin 進(jìn)行分析
使用 git remote prune origin 或者 git fetch origin -p / --prune 去刪除冗余分支。