阿川私房教材:學程式,拿 offer!

63 個專案實戰,直接上手!
無需補習,按步驟打造你的面試作品。

立即解鎖你的轉職秘笈

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 resetgit revert 的差異是什麼?

初學者常常將 git resetgit 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 loggit diff 追蹤更改?

了解你的專案歷史至關重要。使用 git loggit 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 resetgit stash 這樣的命令可以安全地管理本地更改。

我如何能練習 Git 命令?

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


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


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

按讚的人:

共有 0 則留言


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

阿川私房教材:學程式,拿 offer!

63 個專案實戰,直接上手!
無需補習,按步驟打造你的面試作品。

立即解鎖你的轉職秘笈