Git 是一個強大的版本控制工具,但在剛開始使用時可能會感到不知所措。作為初學者,我犯了許多錯誤,但隨著時間的推移,我意識到有一些基本命令、概念和最佳實踐是我希望早點學會的。在這份指南中,我將一步步帶你了解十個關鍵的 Git 教訓,深入淺出地解釋,讓任何初學者都能自信地理解和實施。
像 Git 這樣的版本控制系統對開發者來說是不可或缺的。它們允許你追蹤變更、有效協作並保持乾淨的程式碼庫。然而,如果你不知道從何開始,掌握 Git 可能會有些棘手。這十個建議將幫助你避免常見陷阱,提高生產力,並提供從初學者到進階使用的清晰路線圖。
我最初面對的挑戰之一是,不小心過早地提交了更改。後來我學會了 git reset
的神奇之處。
假設你已經添加了一個檔案(example.txt
)並提交了,但後來發現提交訊息是錯誤的。
git commit -m "wrong message"
要撤銷最後一次提交但保留更改:
git reset --soft HEAD~1
現在,你的檔案回到了暫存區,你可以用正確的訊息重新提交:
git commit -m "correct message"
git reset
和 git revert
的差異是什麼?初學者常常將 git reset
和 git revert
混淆。兩者都可以撤銷更改,但它們工作的方式不同。
git reset
會回溯歷史並更改它。 git revert
則會創建一個新的提交來撤銷更改,保留歷史。git revert
撤銷提交假設你已經提交了想要撤銷的更改,但希望保留記錄:
git revert <commit-hash>
Git 創建一個新的提交來抵消指定提交所做的更改。
合併衝突對於初學者來說令人畏懼,但隨著練習,它們會變得易於管理。
你和隊友編輯了相同的檔案。在合併過程中,Git 標記了衝突。
git merge feature-branch
Git 在檔案中標記衝突:
<<<<<<< HEAD
你的更改
=======
隊友的更改
>>>>>>> feature-branch
通過編輯檔案並刪除衝突標記來解決衝突。然後:
git add conflicted-file.txt
git commit -m "已解決合併衝突"
專業小技巧:使用可視化合併工具,如 git mergetool
,以便更輕鬆地解決衝突。
分支允許你在不影響主程式碼庫的情況下開展功能或修復工作。
要創建一個分支:
git branch feature-branch
切換到該分支:
git checkout feature-branch
或在一個命令中同時進行兩個操作:
git checkout -b feature-branch
完成工作後,將其合併到主分支中:
git checkout main
git merge feature-branch
有時,你需要切換分支,但不想提交當前的更改。暫存功能能拯救你。
要暫存更改:
git stash
稍後,當你想要恢復這些更改時:
git stash pop
暫存非常適合臨時更改或實驗。
重寫歷史對清理混亂的提交非常有用。
假設你在分支上做了三次提交:
git log
輸出:
commit 1a2b3c4
commit 5d6e7f8
commit 9g0h1i2
要將它們合併為一個提交:
git rebase -i HEAD~3
Git 會打開一個互動式編輯器,讓你可以壓縮提交。選擇第二和第三次提交的 squash
,然後保存。這些提交將合併為一個。
git log
和 git diff
追蹤更改?了解你的專案歷史至關重要。使用 git log
和 git diff
來調查。
要查看簡潔的日誌:
git log --oneline
要查看詳細日誌:
git log --stat
比較未暫存的更改:
git diff
比較已暫存的更改:
git diff --cached
標籤標記特定的提交,通常用於版本控制和發布。
要標記當前的提交:
git tag v1.0
將標籤推送到遠端儲存庫:
git push origin v1.0
標籤使得識別專案中的重大時刻變得簡單。
要克隆一個儲存庫:
git clone https://github.com/user/repo.git
從遠端儲存庫獲取並合併更改:
git pull origin main
在本地提交你的工作後:
git push origin feature-branch
.gitignore
文件指定 Git 應忽略的文件,以防止不必要的文件被提交。
創建一個 .gitignore
文件並添加要忽略的文件模式:
# 忽略 node_modules 資料夾
node_modules/
# 忽略環境文件
.env
添加並提交 .gitignore
文件:
git add .gitignore
git commit -m "添加 .gitignore"
Git 中的一個鮮為人知但非常有用的功能是將分支組織成資料夾。你可以並不只是用像 feature
這樣的術語為分支名稱加上前綴,而是可以創建一個結構化的目錄式層次來改善組織。
要創建具有資料夾式組織的功能分支:
git branch feature/my-branch-name
git branch feature/teammates-branch
當你列出分支時,它們會被分組顯示:
git branch
輸出:
feature/my-branch-name
feature/teammates-branch
這種結構使得管理和導航大量分支變得更容易,尤其是在與不同團隊和功能類型的協作專案中。
git bisect
找出有問題的提交當你的專案出現故障時,確定哪個具體提交引入了問題可能會很具挑戰性。Git 的 bisect
工具通過在你的提交歷史中執行二進制搜索來簡化這個過程。
git bisect
找到錯誤開始 bisect 過程:
git bisect start
標記當前(損壞的)提交為壞的:
git bisect bad
標記最後一次已知的好提交:
git bisect good <commit-hash>
Git 現在會檢出一個位於好和壞提交中間的提交。測試你的程式碼,然後告訴 Git 此提交是好還是壞:
如果壞:
git bisect bad
如果好:
git bisect good
重複這個過程直到 Git 確定有問題的提交。
git bisect reset
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
語義版本控制和提交訊息有助於保持專案的清晰性,特別是在發布時。
版本號遵循 MAJOR.MINOR.PATCH
的格式:
使用描述性前綴為提交訊息:
feat
:新增功能。fix
:錯誤修正。docs
:文檔變更。style
:程式碼風格變更(例如格式)。git commit -m "feat: 添加用戶認證功能"
git commit -m "fix: 解決登入時崩潰問題"
像 semantic-release 這樣的工具根據語義提交訊息自動生成變更日誌,簡化你的發布過程。
這些有關分支組織、使用 git bisect
進行故障排除和利用語義實踐的額外提示可以幫助你將 Git 的掌握提升到新高度。它們確保更乾淨的工作流程、更容易的除錯和一致的專案管理。
Git 有助於追蹤程式碼變更、有有效協作並管理專案版本。
可以,像 git reset
和 git stash
這樣的命令可以安全地管理本地更改。
設置本地儲存庫並實驗現實場景。像 GitHub 這樣的工具也提供互動式學習。
掌握 Git 是一個關於實踐和理解核心概念的過程。透過應用這十個技巧,你將從感到不知所措變得能自信地管理任何 Git 工作流程。進入其中,進行實驗,並且不要害怕錯誤——這是學習過程的一部分!
原文出處:https://dev.to/chintanonweb/git-like-a-pro-10-things-i-regret-not-knowing-earlier-24kp