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 pull

git 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

解決衝突的步驟

  1. 打開衝突的檔案,手動選擇要保留的內容(刪掉 <<<<<<<=======>>>>>>> 這些標記)
  2. 存檔
  3. git add 衝突的檔案
  4. git commit -m "解決合併衝突"
  5. git push

🗑️ 強制覆蓋遠端(危險!謹慎使用)

# 強制 push,會覆蓋遠端的版本
git push --force

只在你確定遠端的版本不重要時才使用。

多人協作時絕對不要用,會讓別人的工作消失!


📌 小結

指令用途
git push -u origin main第一次 push(設定 upstream)
git push之後的 push
git pull從 GitHub 拉取最新版本
git fetch只抓取,不合併

04-GitHub入門 | 下一篇 → 06-分支管理