National Yang Ming Chiao Tung University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try a Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

1

Local AI

--

Uedu Code

--

陽明交大 AQI 69 24°C PM2.5 26
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 03

GitHub 遠端協作與分支

push、clone、pull、branch、Fork 與 Pull Request
Interaction導覽 20 minute(s)

Learning Objectives

  • 用 git remote 與 git push 把本機儲存庫推上 GitHub
  • 用 git clone、git fetch、git pull 取得雲端的內容
  • 用分支(branch)在獨立的開發線上修改,再合併回 main
  • 認識 Fork 與 Pull Request,參與別人的專案

從自己的電腦到雲端

到目前為止,所有版本都只存在你的電腦裡。把儲存庫放上 GitHub 之後:

好處 說明
備份 電腦壞了,版本歷史還在雲端
換電腦也能接著做 在另一台電腦 git clone 下來就能繼續
協作 多人各自提交,再用 git pull 同步彼此的修改
分享與參與 公開專案可以被別人 Fork,也可以用 Pull Request 參與別人的專案

這一課依序走過:推上 GitHub、從 GitHub 取得內容、用分支開發,最後是 Fork 與 Pull Request。

Git 的雲端服務有哪些

Git 本身只在你的電腦上運作;要備份、分享或協作,就需要一個放儲存庫的雲端服務(也叫 Git 託管平台)。 這些服務背後都是同一套 Git,clone、push、pull 的用法完全一樣,差別在附加的功能與適合的情境。

服務 經營者 特色與常見用途
GitHub Microsoft 使用者與開源專案最多;有 Pull Request、Issues、Actions(自動化測試與部署)、Pages(免費架靜態網站)、Codespaces(雲端開發環境)。學生可以申請 GitHub Education 取得學生方案
GitLab GitLab Inc. 把版本控制、CI/CD、議題追蹤整合在同一個平台;也提供可以裝在學校或公司自己伺服器上的版本
Bitbucket Atlassian 和同公司的 Jira(專案管理)、Confluence(文件協作)整合緊密,常見於已經使用這些工具的團隊
Azure Repos Microsoft Azure DevOps 的一部分,常見於使用 Azure 雲端與 Microsoft 開發工具的企業
AWS CodeCommit Amazon AWS 雲端上的私有 Git 儲存庫,適合整套服務都在 AWS 的團隊(2024 年曾暫停受理新客戶,2025 年 11 月恢復)
Codeberg 德國非營利組織 以 Forgejo 架設、不以營利為目的,定位是開源專案的家,不提供一般的私人專案託管
Hugging Face Hub Hugging Face AI 模型與資料集的分享平台,每個模型或資料集本身就是一個 Git 儲存庫

另外也可以用 Gitea 或 Forgejo 這類開源軟體,在自己的伺服器上架一個 Git 平台;軟體免費,但備份、維護與資安都要自己負責。

選哪一個?做作業、建立作品集、參與開源專案,從 GitHub 開始最方便,找工作時也最常被看到。 實驗室或公司若已經有指定平台,就跟著團隊用。各服務的免費方案、人數與容量限制常常調整,使用前請以官方網站的最新說明為準。

接下來的操作都以 GitHub 示範;換成其他服務時,只要把遠端網址換掉,其餘指令都一樣。

動畫:推上 GitHub、取得同學的修改

右邊第四欄是 GitHub 上的遠端儲存庫。先設定遠端並 git push,看提交出現在雲端;再按「同學推了一個提交」,提交圖會多出一個虛線的提交(你的電腦還沒有)。這時直接 push 會被拒絕,試試看,再用 git pull 把它拿下來。

把本機儲存庫推上 GitHub

先註冊 GitHub 帳號並登入,按右上角的 + → New repository,輸入儲存庫名稱 hello-git,選擇公開(Public)或私人(Private)。因為本機已經有內容,不要勾選新增 README。建立後複製頁面上的網址。

  1. 1

    設定遠端儲存庫

    git remote add 名稱 網址 把 GitHub 上的儲存庫登記為遠端,名稱習慣用 origin。git remote -v 檢查目前登記了哪些遠端(第一次執行時什麼都不會顯示)。

  2. 2

    git push:推送到 GitHub

    git push -u origin main 把本機的 main 分支推到 origin。-u 會記住對應關係,之後只要打 git push 就好。第一次推送會跳出瀏覽器要你登入 GitHub 授權;GitHub 已經不接受直接輸入帳號密碼,用瀏覽器登入或個人存取權杖(Personal Access Token)驗證。

  3. 3

    之後的日常:改、add、commit、push

    重新整理 GitHub 頁面,就能看到檔案和提交紀錄。之後每次完成一段工作,重複同樣的循環即可。

這段導覽完成了

clone、fetch 與 pull:取得雲端的內容

換一台電腦,或要下載別人的專案時,用 git clone;之後要拿到別人新推上去的修改,用 git pull。

  1. 1

    git clone:第一次下載整個儲存庫

    git clone 網址 資料夾名稱 會把整個專案連同所有版本與分支複製到本機,並自動設定好 origin。通常一個專案只會 clone 一次。

  2. 2

    git fetch:只取得資訊,不合併

    git fetch 從遠端下載新的版本資料,但不改動你的檔案;適合先看看別人改了什麼。

  3. 3

    git pull:取得並合併

    git pull origin main 等於先 fetch 再合併到目前的分支。開始工作前先 pull,可以減少和別人的修改衝突。

  4. 4

    查看遠端資訊

    git remote show origin 顯示遠端的網址與分支對應關係。

這段導覽完成了

動畫:分支分岔與合併

分支在提交圖上最容易看懂。依任務建立 feature 分支並提交,切回 main 也提交一次,兩條線就分岔了;最後在 main 上 git merge feature,看合併提交把兩條線接回來。注意紅色的 HEAD → 標示你現在在哪一個分支。

分支(branch):獨立的開發線

想加新功能又怕弄壞能用的版本?開一條分支,在上面放心修改,完成後再合併回 main。分支之間互不干擾,只要屬於同一個儲存庫,就可以合併。

  1. 1

    查看與建立分支

    git branch 列出所有分支,* 是目前所在的分支。git switch -c 名稱 建立新分支並切換過去(舊版寫法是 git checkout -b 名稱)。

  2. 2

    在分支上提交

    在 add-hello 分支新增 hello.py 並提交。這個提交只存在於 add-hello,main 還看不到。

  3. 3

    切回 main 並合併

    切回 main 時,hello.py 會暫時從資料夾消失(因為 main 還沒有它)。git merge add-hello 把分支的修改合併進來。

  4. 4

    刪除用完的分支並推送

    合併完成的分支可以刪除,最後把 main 推上 GitHub。

這段導覽完成了

Fork 與 Pull Request:參與別人的專案

想替別人的開源專案修錯字、改 bug、加功能,但你沒有權限直接修改他的儲存庫,這時用 Fork 和 Pull Request(PR):

  1. 在原專案頁面按 Fork,把儲存庫複製一份到你自己的帳號
  2. git clone 你 Fork 出來的儲存庫到本機
  3. git remote add upstream 原儲存庫網址,再用 git pull upstream main 隨時取得原專案的最新內容
  4. 修改、git add、git commit、git push(推到你自己 Fork 的儲存庫)
  5. 回到 GitHub 按 Contribute → Open pull request,確認來源與目標分支,說明這次修改的原因,按 Create pull request
  6. 原作者閱讀並檢查你的程式碼,可能會和你討論,最後決定是否合併(merge)
名稱 指向 用途
origin 你 Fork 出來的儲存庫 推送自己的修改
upstream 原作者的儲存庫 取得原專案的最新內容

想一想:遠端、分支與協作

1.

下面哪一個是把本機工作送上 GitHub 的正確順序?

2.

git clone 和 git pull 的差別是?

3.

在 feature 分支完成修改並提交後,要把它併回 main,正確的做法是?

4.

你想對一個開源專案提出修改,但沒有這個儲存庫的寫入權限。比較合適的做法是?

第 1 次作答

重點精華回顧

  • 設定遠端:git remote add origin 網址;第一次推送 git push -u origin main,之後只要 git push。
  • 日常流程:修改 → git add → git commit → git push;沒有 commit 就沒有東西可以推。
  • git clone 第一次下載整個儲存庫與歷史;之後用 git pull(等於 git fetch 再合併)同步別人的新版本。
  • 分支是獨立的開發線:git switch -c 名稱 建立並切換,完成後切回 main 再 git merge。
  • 沒有寫入權限時,先 Fork 到自己的帳號、修改並 push,再發 Pull Request 請原作者審閱與合併。
這一課完成了!
看我的學習進度
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。