iT邦幫忙

2025 iThome 鐵人賽

DAY 29
0
Modern Web

Git 起來!每日一招學起來系列 第 29

Day 29:Branch & Remote 進階 —— 地端與雲端的雙向連線術

  • 分享至 

  • xImage
  •  

在日常開發中,管理分支和遠端倉庫是一件不可避免的工作。

今天我們來進階探討 Git 本地分支(local)與遠端分支(remote)管理,幫助你更靈活地操作地端與遠端分支,避免不必要的衝突與混亂。


推送分支到遠端(git push)

最常見的操作就是把本地分支推送到遠端:

git push origin main:main
  • 語法 localName:remoteName:將本地 main 分支推送到遠端 main
  • 如果遠端分支名稱與本地相同,冒號後可省略:
git push origin main

💡 小提醒:如果遠端分支不存在,Git 會自動建立,但不會自動設置追蹤(upstream)。

推送到遠端不同名稱分支:

git push origin main:dev
  • 將本地 main 推送到遠端 dev 分支。

設定 upstream(追蹤分支)

git push --set-upstream origin dev:dev
  • 設置上游後,本地分支會自動追蹤遠端分支,之後執行 git pushgit pull 不需指定遠端。
  • 如果本地與遠端分支名稱相同,冒號後可省略。

從遠端建立本地分支並追蹤

git checkout -t origin/dev
git checkout --track origin/dev
git switch --track origin/dev
  • 在本地建立 dev 分支並追蹤 origin/dev
  • 設置追蹤後,git statusgit pull 都會知道要同步哪個遠端分支。

💡 小技巧:如果只想抓取遠端分支,但不建立本地分支,可使用 fetch。


查看遠端倉庫資訊

git remote show origin

範例輸出:

* remote origin
  Fetch URL: git@github.com:username/repo.git
  Push  URL: git@github.com:username/repo.git
  HEAD branch: main
  Remote branches:
    dev      tracked
    main     tracked
    feature/login tracked
  Local branches configured for 'git pull':
    dev      merges with remote dev
    main     merges with remote main
  Local refs configured for 'git push':
    dev      pushes to dev      (up to date)
    main     pushes to main     (up to date)
  • Fetch URL / Push URL:遠端倉庫位置
  • HEAD branch:遠端預設分支
  • Remote branches:已追蹤的遠端分支
  • Local branches configured for 'git pull/push':本地分支對應的遠端

💡 小提醒:這是快速檢查遠端倉庫狀態的好工具,尤其在多分支、多開發者專案中。


git fetch 進階用法

git fetch 只抓取遠端資料,不會自動合併

基本 fetch

git fetch origin master

範例輸出:

remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
From github.com:username/repo
 * branch            master     -> FETCH_HEAD
  • 更新 remotes/origin/master,但不建立本地分支。

指定存放 ref

git fetch origin dev:refs/remotes/origin/master
  • 從遠端 dev 抓取,存到本地 remotes/origin/master

建立本地分支

git fetch origin main:dev
  • 從遠端 main 建立本地 dev 分支。
  • ⚠️ 建立的分支不會自動追蹤遠端。

其他 fetch 選項

git fetch --tags
# 抓取遠端所有 tag

git fetch -p
git fetch --prune
# 刪除已被遠端刪掉的分支,並抓取新分支
git remote prune origin
# 單純刪除本地已不存在的遠端分支

選擇性抓取遠端分支

git remote set-branches --add origin dev
# 只抓 origin 的 dev 分支

git remote set-branches origin '*'
# 恢復抓全部分支

查看分支狀態

列出本地與遠端分支

git branch -a

範例:

* main
  dev
  feature/login
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/dev
  remotes/origin/feature/login

查看追蹤分支與最新提交

git branch -vv

範例:

* main           9a1b2c3 [origin/main] 修正 header 樣式
  dev            7f4d6e1 [origin/dev] 新增登入頁
  feature/login  3b2c1d0 [origin/feature/login: ahead 2] 開發 login 功能
  • [origin/feature/login: ahead 2] → 本地比遠端多 2 個 commit,推送前請確認是否要同步遠端。

只列出遠端分支

git branch -r

範例:

  origin/HEAD -> origin/main
  origin/main
  origin/dev
  origin/feature/login

小技巧

  • git branch -vv:快速檢查本地分支追蹤狀態
  • git branch -r:只看遠端分支
  • git branch -a:一次看到本地與遠端所有分支

地端與遠端分支關係示意圖

       origin/main
           ▲
           │
   ┌───────┴───────┐
   │               │
 local/main     local/dev (fetch/branch)
  • local/main 追蹤 origin/main(upstream)
  • local/dev 可由 fetchcheckout --track 建立
  • push / pull 都依賴追蹤分支設置

小結

  • pushlocal:remote-set-upstream 是進階核心
  • checkout / switch:快速建立並追蹤遠端分支
  • fetch:抓取遠端資料但不自動合併,可配合 prune 清理
  • remote 設定:控制抓取分支,避免抓太多不必要分支
  • 查看分支a/-r/-vv 幫助直觀了解本地與遠端狀態

掌握這些技巧後,你在多分支、多遠端專案中會更有掌控力,也能減少誤操作。


上一篇
Day 28:git worktree —— 多分支同時開發神器
系列文
Git 起來!每日一招學起來29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言