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 帳號並登入,按右上角的 + → New repository,輸入儲存庫名稱 hello-git,選擇公開(Public)或私人(Private)。因為本機已經有內容,不要勾選新增 README。建立後複製頁面上的網址。
-
1
設定遠端儲存庫
git remote add 名稱 網址把 GitHub 上的儲存庫登記為遠端,名稱習慣用origin。git remote -v檢查目前登記了哪些遠端(第一次執行時什麼都不會顯示)。 -
2
git push:推送到 GitHub
git push -u origin main把本機的 main 分支推到 origin。-u會記住對應關係,之後只要打git push就好。第一次推送會跳出瀏覽器要你登入 GitHub 授權;GitHub 已經不接受直接輸入帳號密碼,用瀏覽器登入或個人存取權杖(Personal Access Token)驗證。 -
3
之後的日常:改、add、commit、push
重新整理 GitHub 頁面,就能看到檔案和提交紀錄。之後每次完成一段工作,重複同樣的循環即可。
clone、fetch 與 pull:取得雲端的內容
換一台電腦,或要下載別人的專案時,用 git clone;之後要拿到別人新推上去的修改,用 git pull。
-
1
git clone:第一次下載整個儲存庫
git clone 網址 資料夾名稱會把整個專案連同所有版本與分支複製到本機,並自動設定好origin。通常一個專案只會 clone 一次。 -
2
git fetch:只取得資訊,不合併
git fetch從遠端下載新的版本資料,但不改動你的檔案;適合先看看別人改了什麼。 -
3
git pull:取得並合併
git pull origin main等於先 fetch 再合併到目前的分支。開始工作前先 pull,可以減少和別人的修改衝突。 -
4
查看遠端資訊
git remote show origin顯示遠端的網址與分支對應關係。
分支(branch):獨立的開發線
想加新功能又怕弄壞能用的版本?開一條分支,在上面放心修改,完成後再合併回 main。分支之間互不干擾,只要屬於同一個儲存庫,就可以合併。
-
1
查看與建立分支
git branch列出所有分支,*是目前所在的分支。git switch -c 名稱建立新分支並切換過去(舊版寫法是git checkout -b 名稱)。 -
2
在分支上提交
在
add-hello分支新增hello.py並提交。這個提交只存在於 add-hello,main 還看不到。 -
3
切回 main 並合併
切回 main 時,
hello.py會暫時從資料夾消失(因為 main 還沒有它)。git merge add-hello把分支的修改合併進來。 -
4
刪除用完的分支並推送
合併完成的分支可以刪除,最後把 main 推上 GitHub。
Fork 與 Pull Request:參與別人的專案
想替別人的開源專案修錯字、改 bug、加功能,但你沒有權限直接修改他的儲存庫,這時用 Fork 和 Pull Request(PR):
- 在原專案頁面按 Fork,把儲存庫複製一份到你自己的帳號
git clone你 Fork 出來的儲存庫到本機git remote add upstream 原儲存庫網址,再用git pull upstream main隨時取得原專案的最新內容- 修改、
git add、git commit、git push(推到你自己 Fork 的儲存庫) - 回到 GitHub 按 Contribute → Open pull request,確認來源與目標分支,說明這次修改的原因,按 Create pull request
- 原作者閱讀並檢查你的程式碼,可能會和你討論,最後決定是否合併(merge)
| 名稱 | 指向 | 用途 |
|---|---|---|
origin |
你 Fork 出來的儲存庫 | 推送自己的修改 |
upstream |
原作者的儲存庫 | 取得原專案的最新內容 |
想一想:遠端、分支與協作
下面哪一個是把本機工作送上 GitHub 的正確順序?
git clone 和 git pull 的差別是?
在 feature 分支完成修改並提交後,要把它併回 main,正確的做法是?
你想對一個開源專案提出修改,但沒有這個儲存庫的寫入權限。比較合適的做法是?
重點精華回顧
- 設定遠端:
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 請原作者審閱與合併。