10 個我希望早知道的 Git 知識

Git 是一個強大的版本控制工具,但在剛開始使用時可能會感到不知所措。作為初學者,我犯了許多錯誤,但隨著時間的推移,我意識到有一些基本命令、概念和最佳實踐是我希望早點學會的。在這份指南中,我將一步步帶你了解十個關鍵的 Git 教訓,深入淺出地解釋,讓任何初學者都能自信地理解和實施。

介紹

像 Git 這樣的版本控制系統對開發者來說是不可或缺的。它們允許你追蹤變更、有效協作並保持乾淨的程式碼庫。然而,如果你不知道從何開始,掌握 Git 可能會有些棘手。這十個建議將幫助你避免常見陷阱,提高生產力,並提供從初學者到進階使用的清晰路線圖。


1. 如何在不丟失更改的情況下撤銷最後一次提交?

我最初面對的挑戰之一是,不小心過早地提交了更改。後來我學會了 git reset 的神奇之處。

例子:

假設你已經添加了一個檔案(example.txt)並提交了,但後來發現提交訊息是錯誤的。

git commit -m "wrong message"

要撤銷最後一次提交但保留更改:

git reset --soft HEAD~1

現在,你的檔案回到了暫存區,你可以用正確的訊息重新提交:

git commit -m "correct message"

2. git reset 和 git revert 的差異是什麼?

初學者常常將 git reset 和 git revert 混淆。兩者都可以撤銷更改,但它們工作的方式不同。

  • git reset 會回溯歷史並更改它。
  • git revert 則會創建一個新的提交來撤銷更改,保留歷史。

例子:使用 git revert 撤銷提交

假設你已經提交了想要撤銷的更改,但希望保留記錄:

git revert <commit-hash>

Git 創建一個新的提交來抵消指定提交所做的更改。


3. 如何專業地解決合併衝突?

合併衝突對於初學者來說令人畏懼,但隨著練習,它們會變得易於管理。

情況:

你和隊友編輯了相同的檔案。在合併過程中,Git 標記了衝突。

git merge feature-branch

Git 在檔案中標記衝突:

<<<<<<< HEAD
你的更改
=======
隊友的更改
>>>>>>> feature-branch

通過編輯檔案並刪除衝突標記來解決衝突。然後:

git add conflicted-file.txt
git commit -m "已解決合併衝突"

專業小技巧:使用可視化合併工具,如 git mergetool,以便更輕鬆地解決衝突。


4. 為什麼以及如何有效使用分支?

分支允許你在不影響主程式碼庫的情況下開展功能或修復工作。

例子:創建和切換分支

要創建一個分支:

git branch feature-branch

切換到該分支:

git checkout feature-branch

或在一個命令中同時進行兩個操作:

git checkout -b feature-branch

完成工作後,將其合併到主分支中:

git checkout main
git merge feature-branch

5. 如何安全地暫存更改?

有時,你需要切換分支,但不想提交當前的更改。暫存功能能拯救你。

例子:

要暫存更改:

git stash

稍後,當你想要恢復這些更改時:

git stash pop

暫存非常適合臨時更改或實驗。


6. 如何安全地重寫提交歷史?

重寫歷史對清理混亂的提交非常有用。

例子:壓縮提交

假設你在分支上做了三次提交:

git log

輸出:

commit 1a2b3c4
commit 5d6e7f8
commit 9g0h1i2

要將它們合併為一個提交:

git rebase -i HEAD~3

Git 會打開一個互動式編輯器,讓你可以壓縮提交。選擇第二和第三次提交的 squash,然後保存。這些提交將合併為一個。


7. 如何使用 git log 和 git diff 追蹤更改?

了解你的專案歷史至關重要。使用 git log 和 git diff 來調查。

例子:查看提交歷史

要查看簡潔的日誌:

git log --oneline

要查看詳細日誌:

git log --stat

例子:比較更改

比較未暫存的更改:

git diff

比較已暫存的更改:

git diff --cached

8. 如何使用標籤進行版本控制?

標籤標記特定的提交,通常用於版本控制和發布。

例子:創建標籤

要標記當前的提交:

git tag v1.0

將標籤推送到遠端儲存庫:

git push origin v1.0

標籤使得識別專案中的重大時刻變得簡單。


9. 如何克隆、拉取和推送?

例子:克隆儲存庫

要克隆一個儲存庫:

git clone https://github.com/user/repo.git

例子:拉取更改

從遠端儲存庫獲取並合併更改:

git pull origin main

例子:推送更改

在本地提交你的工作後:

git push origin feature-branch

10. 什麼是 Gitignore,如何運作?

.gitignore 文件指定 Git 應忽略的文件,以防止不必要的文件被提交。

例子:

創建一個 .gitignore 文件並添加要忽略的文件模式:

# 忽略 node_modules 資料夾
node_modules/

# 忽略環境文件
.env

添加並提交 .gitignore 文件:

git add .gitignore
git commit -m "添加 .gitignore"

額外提示

11. 將分支組織成資料夾以改善結構

Git 中的一個鮮為人知但非常有用的功能是將分支組織成資料夾。你可以並不只是用像 feature 這樣的術語為分支名稱加上前綴,而是可以創建一個結構化的目錄式層次來改善組織。

例子:

要創建具有資料夾式組織的功能分支:

git branch feature/my-branch-name
git branch feature/teammates-branch

當你列出分支時,它們會被分組顯示:

git branch

輸出:

  feature/my-branch-name
  feature/teammates-branch

這種結構使得管理和導航大量分支變得更容易,尤其是在與不同團隊和功能類型的協作專案中。


12. 使用 git bisect 找出有問題的提交

當你的專案出現故障時,確定哪個具體提交引入了問題可能會很具挑戰性。Git 的 bisect 工具通過在你的提交歷史中執行二進制搜索來簡化這個過程。

例子:使用 git bisect 找到錯誤

  1. 開始 bisect 過程:

    git bisect start
  2. 標記當前(損壞的)提交為壞的:

    git bisect bad
  3. 標記最後一次已知的好提交:

    git bisect good <commit-hash>

Git 現在會檢出一個位於好和壞提交中間的提交。測試你的程式碼,然後告訴 Git 此提交是好還是壞:

  • 如果壞:

    git bisect bad
  • 如果好:

    git bisect good

重複這個過程直到 Git 確定有問題的提交。

  1. 完成後,重置 bisect 狀態:
    git bisect reset

13. 為什麼你應該了解 git reflog

即使錯誤看似不可挽回,git reflog 也能拯救你。它跟蹤 HEAD 的變更,允許你恢復提交,即使在執行了像 git reset 等操作後。

例子:恢復重設的提交

假設你不小心重設了你的分支:

git reset --hard HEAD~1

你意識到需要之前的提交。使用 git reflog 找到其參考:

git reflog

輸出:

1a2b3c4 HEAD@{0}: reset: moving to HEAD~1
5d6e7f8 HEAD@{1}: commit: Added new feature

要恢復之前的提交:

git checkout 5d6e7f8

14. 語義版本控制和語義提交

語義版本控制和提交訊息有助於保持專案的清晰性,特別是在發布時。

例子:語義版本控制

版本號遵循 MAJOR.MINOR.PATCH 的格式:

  • MAJOR:重大變更。
  • MINOR:新增功能,但不會破壞向後相容性。
  • PATCH:錯誤修正。

例子:語義提交

使用描述性前綴為提交訊息:

  • feat:新增功能。
  • fix:錯誤修正。
  • docs:文檔變更。
  • style:程式碼風格變更(例如格式)。
git commit -m "feat: 添加用戶認證功能"
git commit -m "fix: 解決登入時崩潰問題"

自動生成變更日誌

像 semantic-release 這樣的工具根據語義提交訊息自動生成變更日誌,簡化你的發布過程。


這些有關分支組織、使用 git bisect 進行故障排除和利用語義實踐的額外提示可以幫助你將 Git 的掌握提升到新高度。它們確保更乾淨的工作流程、更容易的除錯和一致的專案管理。


常見問題

為什麼 Git 對初學者很重要?

Git 有助於追蹤程式碼變更、有有效協作並管理專案版本。

我可以在不影響遠端儲存庫的情況下撤銷更改嗎?

可以,像 git reset 和 git stash 這樣的命令可以安全地管理本地更改。

我如何能練習 Git 命令?

設置本地儲存庫並實驗現實場景。像 GitHub 這樣的工具也提供互動式學習。


掌握 Git 是一個關於實踐和理解核心概念的過程。透過應用這十個技巧,你將從感到不知所措變得能自信地管理任何 Git 工作流程。進入其中,進行實驗,並且不要害怕錯誤——這是學習過程的一部分!


原文出處:https://dev.to/chintanonweb/git-like-a-pro-10-things-i-regret-not-knowing-earlier-24kp


精選技術文章翻譯,幫助開發者持續吸收新知。
按讚的人:

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
boluoji
📝17   💬3   ❤️6
352
🥈
站長阿川
📝5   💬2   ❤️1
213
🥉
mike
1
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登