<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hant-TW">
	<id>https://jiva.dila.edu.tw/index.php?action=history&amp;feed=atom&amp;title=Pro_Git_3.5_%E9%81%A0%E7%AB%AF%E5%88%86%E6%94%AF</id>
	<title>Pro Git 3.5 遠端分支 - 修訂歷史</title>
	<link rel="self" type="application/atom+xml" href="https://jiva.dila.edu.tw/index.php?action=history&amp;feed=atom&amp;title=Pro_Git_3.5_%E9%81%A0%E7%AB%AF%E5%88%86%E6%94%AF"/>
	<link rel="alternate" type="text/html" href="https://jiva.dila.edu.tw/index.php?title=Pro_Git_3.5_%E9%81%A0%E7%AB%AF%E5%88%86%E6%94%AF&amp;action=history"/>
	<updated>2026-05-05T21:09:57Z</updated>
	<subtitle>本 Wiki 上此頁面的修訂歷史</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://jiva.dila.edu.tw/index.php?title=Pro_Git_3.5_%E9%81%A0%E7%AB%AF%E5%88%86%E6%94%AF&amp;diff=537&amp;oldid=prev</id>
		<title>imported&gt;Ray：​Pro Git 3.5 遠程分支移動到Pro Git 3.5 遠端分支</title>
		<link rel="alternate" type="text/html" href="https://jiva.dila.edu.tw/index.php?title=Pro_Git_3.5_%E9%81%A0%E7%AB%AF%E5%88%86%E6%94%AF&amp;diff=537&amp;oldid=prev"/>
		<updated>2011-05-25T02:54:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Pro_Git_3.5_%E9%81%A0%E7%A8%8B%E5%88%86%E6%94%AF&quot; class=&quot;mw-redirect&quot; title=&quot;Pro Git 3.5 遠程分支&quot;&gt;Pro Git 3.5 遠程分支&lt;/a&gt;移動到&lt;a href=&quot;/index.php?title=Pro_Git_3.5_%E9%81%A0%E7%AB%AF%E5%88%86%E6%94%AF&quot; title=&quot;Pro Git 3.5 遠端分支&quot;&gt;Pro Git 3.5 遠端分支&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hant-TW&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上個修訂&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;於 2011年5月25日 (三) 10:54 的修訂&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;zh-Hant-TW&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;（無差異）&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>imported&gt;Ray</name></author>
	</entry>
	<entry>
		<id>https://jiva.dila.edu.tw/index.php?title=Pro_Git_3.5_%E9%81%A0%E7%AB%AF%E5%88%86%E6%94%AF&amp;diff=536&amp;oldid=prev</id>
		<title>imported&gt;Ray：​新頁面: 遠端分支（remote branch）是對遠端倉庫狀態的索引。它們是一些無法移動的本地分支；只有在進行 Git 的網路活動時才會更新。遠端分支就像是...</title>
		<link rel="alternate" type="text/html" href="https://jiva.dila.edu.tw/index.php?title=Pro_Git_3.5_%E9%81%A0%E7%AB%AF%E5%88%86%E6%94%AF&amp;diff=536&amp;oldid=prev"/>
		<updated>2011-05-25T02:54:32Z</updated>

		<summary type="html">&lt;p&gt;新頁面: 遠端分支（remote branch）是對遠端倉庫狀態的索引。它們是一些無法移動的本地分支；只有在進行 Git 的網路活動時才會更新。遠端分支就像是...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新頁面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;遠端分支（remote branch）是對遠端倉庫狀態的索引。它們是一些無法移動的本地分支；只有在進行 Git 的網路活動時才會更新。遠端分支就像是書簽，提醒著你上次連接遠端倉庫時上面各分支的位置。&lt;br /&gt;
&lt;br /&gt;
我們用 (遠端倉庫名)/(分支名) 這樣的形式表示遠端分支。比如我們想看看上次同 origin 倉庫通訊時 master 的樣子，就應該查看 origin/master 分支。如果你和同伴一起修復某個問題，但他們先推送了一個 iss53 分支到遠端倉庫，雖然你可能也有一個本地的 iss53 分支，但指向伺服器上最新更新的卻應該是 origin/iss53 分支。&lt;br /&gt;
&lt;br /&gt;
可能有點亂，我們不妨舉例說明。假設你們團隊有個地址為 git.ourcompany.com 的 Git 伺服器。如果你從這裡克隆(clone)，Git 會自動為你將此遠端倉庫命名為 origin，並下載其中所有的資料，建立一個指向它的 master 分支的指標，在本地命名為 origin/master，但你無法在本地更改其資料。接著，Git 建立一個屬於你自己的本地 master 分支，始於 origin 上 master 分支相同的位置，你可以就此開始工作（見圖 3-22）：&lt;br /&gt;
&lt;br /&gt;
[[圖片:pro-git-3-22.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
圖 3-22. 一次 Git 克隆會建立你自己的本地分支 master 和遠端分支 origin/master，它們都指向 origin/master 分支的最後一次提交。&lt;br /&gt;
&lt;br /&gt;
要是你在本地 master 分支做了會兒事情，與此同時，其他人向 git.ourcompany.com 推送了內容，更新了上面的 master 分支，那麼你的提交歷史會開始朝不同的方向發展。不過只要你不和伺服器通訊，你的 origin/master 指標不會移動（見圖 3-23）。&lt;br /&gt;
&lt;br /&gt;
[[圖片:pro-git-3-23.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
圖 3-23. 在本地工作的同時有人向遠端倉庫推送內容會讓提交歷史發生分歧。&lt;br /&gt;
&lt;br /&gt;
可以執行 git fetch origin 來進行同步。該命令首先找到 origin 是哪個伺服器（本例為 git.ourcompany.com），從上面獲取你尚未擁有的資料，更新你本地的資料庫，然後把 origin/master 的指針移到它最新的位置（見圖 3-24）。&lt;br /&gt;
&lt;br /&gt;
[[圖片:pro-git-3-24.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
圖 3-24. git fetch 命令會更新 remote 索引。&lt;br /&gt;
&lt;br /&gt;
為了示範擁有多個遠端分支（不同的遠端伺服器）的專案是個什麼樣，我們假設你還有另一個僅供你的敏捷開發小組使用的內部伺服器 git.team1.ourcompany.com。可以用第二章中提到的 git remote add 命令把它加為當前專案的遠端分支之一。我們把它命名為 teamone，表示那一整串 Git 位址（見圖 3-25）。&lt;br /&gt;
&lt;br /&gt;
[[圖片:pro-git-3-25.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
圖 3-25. 把另一個伺服器加為遠端倉庫&lt;br /&gt;
&lt;br /&gt;
現在你可以用 git fetch teamone 來獲取小組伺服器上你還沒有的資料了。由於當前該伺服器上的內容是你 origin 伺服器上的子集，Git 不會下載任何資料，而只是簡單地創建一個名為 teamone/master 的分支來指向 teamone 伺服器上 master 所指向的更新 31b8e（見圖 3-26）。&lt;br /&gt;
&lt;br /&gt;
[[圖片:pro-git-3-26.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
圖 3-26. 你在本地有了一個指向 teamone 伺服器上 master 分支的索引。&lt;br /&gt;
&lt;br /&gt;
=推送=&lt;br /&gt;
&lt;br /&gt;
要想和其他人分享某個分支，你需要把它推送(push)到一個你擁有寫入許可權的遠端倉庫。你的本地分支不會被自動同步到你引入的遠端分支中，除非你明確執行推送操作。換句話說，對於無意分享的，你盡可以保留為私人分支，而只推送那些協同工作的特性分支。&lt;br /&gt;
&lt;br /&gt;
如果你有個叫 serverfix 的分支需要和他人一起開發，可以執行 git push (遠端倉庫名) (分支名)：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git push origin serverfix&lt;br /&gt;
Counting objects: 20, done.&lt;br /&gt;
Compressing objects: 100% (14/14), done.&lt;br /&gt;
Writing objects: 100% (15/15), 1.74 KiB, done.&lt;br /&gt;
Total 15 (delta 5), reused 0 (delta 0)&lt;br /&gt;
To git@github.com:schacon/simplegit.git&lt;br /&gt;
 * [new branch]      serverfix -&amp;gt; serverfix&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
這其實有點像條捷徑。Git 自動把 serverfix 分支名擴展為 refs/heads/serverfix:refs/heads/serverfix，意為“取出我的 serverfix 本地分支，推送它來更新遠端倉庫的 serverfix 分支”。我們將在第九章進一步介紹 refs/heads/ 部分的細節，不過一般使用的時候都可以省略它。也可以運行 git push origin serverfix:serferfix 來實現相同的效果，它的意思是“提取我的 serverfix 並更新到遠程倉庫的 serverfix”。通過此語法，你可以把本地分支推送到某個命名不同的遠端分支：若想把遠端分支叫作 awesomebranch，可以用 git push origin serverfix:awesomebranch 來將你本地端的 serverfix 分支推送到遠端專案的 awesomebranch 分支。&lt;br /&gt;
&lt;br /&gt;
接下來，當你的協作者再次從伺服器上獲取資料時，他們將得到一個新的遠端分支 origin/serverfix：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git fetch origin&lt;br /&gt;
remote: Counting objects: 20, done.&lt;br /&gt;
remote: Compressing objects: 100% (14/14), done.&lt;br /&gt;
remote: Total 15 (delta 5), reused 0 (delta 0)&lt;br /&gt;
Unpacking objects: 100% (15/15), done.&lt;br /&gt;
From git@github.com:schacon/simplegit&lt;br /&gt;
 * [new branch]      serverfix    -&amp;gt; origin/serverfix&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
值得注意的是，在 fetch 操作抓來新的遠端分支之後，你仍然無法在本地編輯該遠端倉庫。換句話說，在本例中，你不會有一個新的 serverfix 分支，有的只是一個你無法移動的 origin/serverfix 指標。&lt;br /&gt;
&lt;br /&gt;
如果要把該內容合併到當前分支，可以運行 git merge origin/serverfix。如果想要一份自己的 serverfix 來開發，可以在遠端分支的基礎上分化出一個新的分支來：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git checkout -b serverfix origin/serverfix&lt;br /&gt;
Branch serverfix set up to track remote branch refs/remotes/origin/serverfix.&lt;br /&gt;
Switched to a new branch &amp;quot;serverfix&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
這會切換到新建的 serverfix 本地分支，其內容同遠端分支 origin/serverfix 一致，你可以在裡面繼續開發了。&lt;br /&gt;
&lt;br /&gt;
=跟蹤分支=&lt;br /&gt;
&lt;br /&gt;
從遠端分支檢出的本地分支，稱為 跟蹤分支(tracking branch)。跟蹤分支是一種和遠端分支有直接聯繫的本地分支。在跟蹤分支裡輸入 git push，Git 會自行推斷應該向哪個伺服器的哪個分支推送資料。反過來，在這些分支裡運行 git pull 會獲取所有遠端索引，並把它們的資料都合併到本地分支中來。&lt;br /&gt;
&lt;br /&gt;
在克隆倉庫時，Git 通常會自動創建一個 master 分支來跟蹤 origin/master。這正是 git push 和 git pull 一開始就能正常工作的原因。當然，你可以隨心所欲地設定為其它跟蹤分支，比如 origin 上除了 master 之外的其它分支。剛才我們已經看到了這樣的一個例子：git checkout -b [分支名] [遠端名]/[分支名]。如果你有 1.6.2 以上版本的 Git，還可以用 --track 選項簡化：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git checkout --track origin/serverfix&lt;br /&gt;
Branch serverfix set up to track remote branch refs/remotes/origin/serverfix.&lt;br /&gt;
Switched to a new branch &amp;quot;serverfix&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
要為本地分支設定不同于遠端分支的名字，只需在前個版本的命令裡換個名字：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git checkout -b sf origin/serverfix&lt;br /&gt;
Branch sf set up to track remote branch refs/remotes/origin/serverfix.&lt;br /&gt;
Switched to a new branch &amp;quot;sf&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
現在你的本地分支 sf 會自動向 origin/serverfix 推送和抓取資料了。&lt;br /&gt;
&lt;br /&gt;
=刪除遠端分支=&lt;br /&gt;
&lt;br /&gt;
如果不再需要某個遠端分支了，比如搞定了某個特性並把它合併進了遠端的 master 分支（或任何其他存放穩定代碼的地方），可以用這個非常無厘頭的語法來刪除它：git push [遠端名] :[分支名]。如果想在伺服器上刪除 serverfix 分支，運行下面的命令：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git push origin :serverfix&lt;br /&gt;
To git@github.com:schacon/simplegit.git&lt;br /&gt;
 - [deleted]         serverfix&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
咚！伺服器上的分支沒了。你最好特別留心這一頁，因為你一定會用到那個命令，而且你很可能會忘掉它的語法。有種方便記憶這條命令的方法：記住我們不久前見過的 git push [遠端名] [本地分支]:[遠端分支] 語法，如果省略 [本地分支]，那就等於是在說“在這裡提取空白然後把它變成[遠端分支]”。&lt;/div&gt;</summary>
		<author><name>imported&gt;Ray</name></author>
	</entry>
</feed>