07 - 常見問題與解法

06-分支管理 | 下一篇 → 08-指令速查表


❌ 常見錯誤一覽


1. fatal: not a git repository

錯誤訊息:

fatal: not a git repository (or any of the parent directories): .git

原因: 你執行 git 指令的資料夾還沒有初始化。

解法:

git init

2. Push 被拒絕:rejected - fetch first

錯誤訊息:

! [rejected]  main -> main (fetch first)

原因: GitHub 上有你本地沒有的新 commit。

解法:

git pull
git push

3. Merge Conflict(合併衝突)

錯誤訊息:

CONFLICT (content): Merge conflict in file.md

解法:

  1. 打開衝突檔案,找到 <<<<<<<=======>>>>>>> 標記
  2. 手動決定要留哪個版本,刪掉那三行標記
  3. 儲存檔案
git add .
git commit -m "解決合併衝突"

4. error: failed to push - Permission denied (publickey)

原因: SSH key 沒有設定好,或 GitHub 上沒有你的公鑰。

解法:

# 確認 SSH key 是否存在
ls ~/.ssh/
 
# 測試 GitHub 連線
ssh -T git@github.com
 
# 如果失敗,重新設定 SSH key(見 02 章節)

5. detached HEAD 狀態

錯誤訊息:

HEAD detached at a3f1b2c

原因: 你用 git checkout [commit hash] 跳到了過去的某個 commit。

解法:

# 回到 main 分支
git switch main

6. 想修改剛剛的 commit 訊息

# 修改最後一次 commit 的訊息(只限還沒 push 的)
git commit --amend -m "修正後的訊息"

7. 不小心 git add 了不該加的檔案

# 把檔案從暫存區移除(保留修改)
git restore --staged 檔案名稱
 
# 把所有暫存區的東西移除
git restore --staged .

8. 不小心刪掉了本地的修改

# 恢復單一檔案(還沒 commit 的修改)
git restore 檔案名稱
 
# ⚠️ 這個操作不可逆!

9. 想要完全撤銷最後一次 commit

# 撤銷 commit,但保留修改(可以重新 commit)
git reset --soft HEAD~1
 
# 撤銷 commit 並丟棄修改(危險!)
git reset --hard HEAD~1

HEAD~1 表示「目前的上一個 commit」


10. git push 要求輸入密碼

原因: 你用的是 HTTPS 連線,而不是 SSH。

解法一: 改用 SSH(見 02-安裝與初始設定

解法二: 使用 Personal Access Token 作為密碼

解法三: 設定 credential helper(讓 git 記住密碼)

# macOS
git config --global credential.helper osxkeychain
 
# Windows
git config --global credential.helper manager

11. 遠端 repo 的名稱改了,怎麼更新本地設定?

# 更新遠端 URL
git remote set-url origin git@github.com:username/new-repo-name.git
 
# 確認更新成功
git remote -v

🆘 最後手段:如果一切都壞掉了

如果 repo 搞得一團糟,可以這樣救回來:

# 方法:重新 clone 一份乾淨的
cd ..
git clone git@github.com:username/repo-name.git repo-clean
 
# 然後把你想保留的修改,手動複製到新的資料夾

06-分支管理 | 下一篇 → 08-指令速查表