05 - Push 與 Pull
← 04-GitHub入門 | 下一篇 → 06-分支管理
⬆️ Push:把本地推到 GitHub
# 第一次 push(需要設定 upstream)
git push -u origin main
# 之後每次 push 只需要
git push
-u是--set-upstream的縮寫,設定預設的推送目標。 第一次設定後,以後直接git push就夠了。
完整的第一次 push 流程
# 1. 初始化(如果還沒有)
git init
# 2. 加入所有檔案
git add .
# 3. 建立第一個 commit
git commit -m "Initial commit"
# 4. 連接 GitHub repo
git remote add origin git@github.com:username/repo-name.git
# 5. Push!
git push -u origin main⬇️ Pull:從 GitHub 拉下最新版本
git pullgit pull 實際上是兩個指令的組合:
git fetch ← 從 GitHub 抓取最新資料(但不合併)
+
git merge ← 將抓下來的內容合併到本地
什麼時候要 pull?
- 在多台電腦上工作時,每次開始工作前先 pull
- 和別人合作時,在 push 之前先 pull
🔄 多台電腦的同步工作流程
電腦 A(家裡)完成工作後:
git add .
git commit -m "更新筆記"
git push電腦 B(醫院)開始工作前:
git pull
# 現在就有最新的筆記了,可以繼續編輯⚠️ Push 被拒絕怎麼辦?
最常見的錯誤訊息:
! [rejected] main -> main (fetch first)
error: failed to push some refs
這代表 GitHub 上有你本地沒有的新 commit(例如在另一台電腦 push 過)。
解法
# 先 pull(把遠端的拉下來合併)
git pull
# 確認沒有衝突後,再 push
git push💥 Merge Conflict(合併衝突)
如果兩邊都修改了同一個檔案的同一個地方,Git 就不知道要保留哪個版本,會出現衝突。
CONFLICT (content): Merge conflict in notes.md
Automatic merge failed; fix conflicts and then commit the result.
Git 會在衝突的地方標記:
<<<<<<< HEAD
這是你本地的版本
=======
這是 GitHub 上的版本
>>>>>>> origin/main
解決衝突的步驟
- 打開衝突的檔案,手動選擇要保留的內容(刪掉
<<<<<<<、=======、>>>>>>>這些標記) - 存檔
git add 衝突的檔案git commit -m "解決合併衝突"git push
🗑️ 強制覆蓋遠端(危險!謹慎使用)
# 強制 push,會覆蓋遠端的版本
git push --force只在你確定遠端的版本不重要時才使用。
多人協作時絕對不要用,會讓別人的工作消失!
📌 小結
| 指令 | 用途 |
|---|---|
git push -u origin main | 第一次 push(設定 upstream) |
git push | 之後的 push |
git pull | 從 GitHub 拉取最新版本 |
git fetch | 只抓取,不合併 |
← 04-GitHub入門 | 下一篇 → 06-分支管理