07 - 常見問題與解法
❌ 常見錯誤一覽
1. fatal: not a git repository
錯誤訊息:
fatal: not a git repository (or any of the parent directories): .git
原因: 你執行 git 指令的資料夾還沒有初始化。
解法:
git init2. Push 被拒絕:rejected - fetch first
錯誤訊息:
! [rejected] main -> main (fetch first)
原因: GitHub 上有你本地沒有的新 commit。
解法:
git pull
git push3. Merge Conflict(合併衝突)
錯誤訊息:
CONFLICT (content): Merge conflict in file.md
解法:
- 打開衝突檔案,找到
<<<<<<<、=======、>>>>>>>標記 - 手動決定要留哪個版本,刪掉那三行標記
- 儲存檔案
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 main6. 想修改剛剛的 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 manager11. 遠端 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
# 然後把你想保留的修改,手動複製到新的資料夾