CodeGym /課程 /C# SELF /專業人的工具與問題解決

專業人的工具與問題解決

C# SELF
等級 26 , 課堂 4
開放

到目前為止我們討論的是理想情況:你寫程式、做 commit、建立 Pull Request。但在現實中常常會出狀況:你可能在程式碼裡犯錯、用錯的訊息做了 commit,或只是發現自己朝錯誤方向走了。這堂課我們會聊常見的問題怎麼解決。

1. Rollback — 取消到 commit 之前的變更

場景:你修改了檔案,但發現所有修改都是錯的,想快速把檔案還原到上一次 commit 之後的狀態。

使用 Rollback 功能:

  1. 打開 Commit 標籤。
  2. 在列表中找到你想要「回滾」的已修改檔案。
  3. 對它按右鍵然後選擇 Rollback

IDE 會警告你變更會被丟失。確認後檔案會立刻回到 Git 中上一次保存的版本。這是取消本地變更最簡單也最安全的方法。

2. Reset — 刪除本地 commits

場景:你做了一個或多個 commit,但還沒做 push。你發現這些 commits 是錯的,想把它們完全刪掉,就像從來沒做過一樣。

使用 Reset 功能:

  1. 打開 Git -> Log 標籤,查看 commit 歷史。
  2. 找到最後一個「好的」commit,也就是你想要回到的那個(在錯誤的 commits 之前)。
  3. 對它按右鍵,選擇 Reset Current Branch to Here...

在打開的視窗會讓你選擇 reset 的模式。最激進的是 Hard

注意! Hard 模式會不可逆地刪除所有在選中 commit 之後的 commits,以及那些 commits 中的程式碼變更。請非常小心地使用它,且只用在那些還沒被任何人看到(還沒 push 到 GitHub)的 commits 上。

3. Push 之後該怎麼辦?

場景:你做了 push,之後才發現裡面有錯誤。

一旦 commit 被推到遠端伺服器,它就成為專案公共歷史的一部分。試圖重寫這段歷史可能會給同事帶來大麻煩。想像一下他們已經把你的變更拉下來並在其上開始工作。

正確且安全的做法:

直接做一個新的 commit 去修正錯誤,然後推送它。這是完全正常的做法。這樣一來,歷史保持誠實且對所有人都清楚。

4. 回顧過去:進階的 log 使用

我們已經知道 Git -> Log 標籤,但它不僅僅是 commit 列表,而是一個強大的調查工具。

  • Commit Hash(提交哈希):你應該在 log 裡看到那種由字母跟數字組成的字串,例如 a1b2c3d。這個 hash 是唯一的,用來精確指向專案歷史中的某一點。你很少需要手動使用它,但要知道它就是每個代碼「快照」的唯一標識。
  • 你可以根據 branch、author、日期甚至 commit message 中的字詞來過濾歷史。這能幫你快速找到誰在何時對某塊功能做過改動。
  • 想找是哪個 commit 新增或刪除了一行特定的程式碼?在 Log 視窗有一個搜尋欄,它不只搜尋訊息,還能搜尋變更內容本身。
  • 在程式碼編輯器的行號區按右鍵,選擇 Annotate with Git Blame。IDE 會在每一行旁邊告訴你是誰以及在哪個 commit 最後改過它。這對理解為什麼程式碼要這樣寫非常有幫助。

5. 危險區:Force Push

所以我們已經確認改動已推送的 commits 是不好的做法。但如果你還是改寫了本地歷史(比如用 Reset),結果它和伺服器上的歷史不一致,當你嘗試正常 push 時 Git 會報錯,保護公共歷史不被覆蓋。

這種情況下有個選項叫做 — force push(強制推送)。這個命令告訴伺服器:「把你那邊的都忘了。我的本地歷史才是正確的。用我的歷史替換你那邊的。」

注意! 在 99% 的情況下,在團隊專案中使用 force push 是個 災難。它可能會不可逆地刪除你同事已經拉下來並基於此工作的 commits。這就像從大家共用的圖書中撕掉頁面然後黏上你自己的。

什麼情況絕對不能用 force push

  • 任何共享分支:maindevelopmaster絕對不行。
  • 任何有其他人也在上面工作的分支。

唯一可接受的情境:

你在自己的私人 feature branch 上工作,沒有人看過也沒人用過。你做了幾個「髒」的 commits,推到伺服器後又想用 Reset 整理它們。這種情況下可以做 force push,把你在伺服器上的分支更新好,再去建立 Pull Request。

在 IDE 裡這個選項通常藏在 Push 按鈕後面。IDE 的開發者是故意這麼設計的,避免你不小心按到。

如果你沒有 100% 的把握自己在做什麼——就別用 force push。更安全的做法是做一個新的 commit 去修正問題。

6. 專案更新

在開始新任務前,務必在 main 分支上按一下 Update Project。這能避免很多未來的合併衝突,並確保你是從最新的程式碼開始工作的。

1
問卷/小測驗
認識 Git,等級 26,課堂 4
未開放
認識 Git
版本控制:用 Git 和 GitHub 工作
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION