前言:為什么你的代碼總是"失蹤"?
"啊!我的代碼呢?"——這可能是每個程序員都曾發出過的靈魂吶喊。還記得上周我熬夜寫的300行JavaScript,第二天醒來發現被自己手賤覆蓋了,那一刻我深刻理解了什么叫"痛徹心扉"。
別擔心,今天我要介紹的Git & GitHub,就是專治各種代碼"失蹤"的神器!它不僅能讓你的代碼永遠安全,還能讓你和小伙伴們愉快地"多人運動"
一、Git:代碼的"時光機"
1.1 什么是版本控制?
想象一下,你正在寫一本小說:
-
初稿:主角叫張三,是個程序員
-
第二版:不行,程序員太普通了,改成超級英雄!
-
第三版:超級英雄太俗,還是改成會編程的貓吧...
沒有版本控制,你只能在一個文件上反復修改,最后可能連自己最初的想法都找不回來了。Git就是幫你把這些"版本快照"都保存下來的神器!
1.2 Git的安裝與配置
安裝Git(以Windows為例):
-
官網下載:Git
-
一路"Next",安裝完成后在命令行輸入:
git --version
# 看到版本號說明安裝成功,比如:git version 2.33.0.windows.2
基礎配置(告訴Git你是誰):
git config --global user.name "你的名字"
git config --global user.email "你的郵箱"
# 查看配置
git config --list
1.3 Git核心命令實戰
初始化倉庫
mkdir my-project # 創建項目文件夾
cd my-project # 進入文件夾
git init # 初始化Git倉庫
# 你會看到提示:Initialized empty Git repository in .../.git/
基礎工作流
# 創建一個文件
echo "console.log('Hello Git');" > index.js# 查看狀態
git status
# 會提示有未跟蹤的文件index.js# 添加到暫存區
git add index.js# 提交到本地倉庫
git commit -m "feat: 添加初始JavaScript文件"
# -m后面是提交信息,要寫得清晰明了
查看歷史記錄
git log
# 你會看到類似這樣的輸出:
# commit 7a3b9c2...(哈希值)
# Author: 你的名字 <你的郵箱>
# Date: Wed Sep 1 10:00:00 2023 +0800
# feat: 添加初始JavaScript文件
二、分支管理:平行宇宙的魔法
2.1 為什么需要分支?
想象你在開發一個網站:
-
主分支(master/main):線上穩定運行的版本
-
開發分支(dev):日常開發用
-
功能分支(feature/login):開發登錄功能
-
修復分支(hotfix/bug):緊急修復線上bug
這樣就不會互相干擾,就像在平行宇宙中開發一樣!
2.2 分支操作實戰
# 查看當前分支
git branch
# 默認只有master/main分支,前面帶*號# 創建新分支
git branch dev# 切換分支
git checkout dev
# 或者更簡單的方式(創建并切換)
git checkout -b feature/login# 在新分支上做些修改
echo "// 登錄功能代碼" >> index.js
git add .
git commit -m "feat: 添加登錄功能"# 切換回主分支
git checkout main# 合并分支
git merge feature/login
2.3 當分支"打架"了:解決沖突
有時候不同分支修改了同一處代碼,合并時就會沖突:
<<<<<<< HEAD
console.log('Hello from main branch');
=======
console.log('Hello from feature branch');
>>>>>>> feature/login
你需要手動選擇保留哪部分(或都保留),然后:
?
git add .
git commit -m "fix: 解決合并沖突"
三、GitHub:代碼的"社交網絡"
3.1 本地與遠程的"異地戀"
# 在GitHub上創建新倉庫(不要勾選README等初始化選項)
# 然后關聯本地倉庫
git remote add origin https://github.com/你的用戶名/倉庫名.git# 第一次推送
git push -u origin main
# 之后可以簡寫為 git push
3.2 團隊協作流程
-
克隆倉庫:
git clone https://github.com/團隊/項目.git
2.獲取最新代碼:
git pull origin main
3.推送你的修改:
git push origin your-branch
4.發起Pull Request(PR):
-
在GitHub界面上操作
-
等待代碼審查(Code Review)
-
通過后合并到主分支
3.3 GitHub實用技巧
Issue跟蹤:用來記錄bug、討論功能
Wiki:項目文檔
Actions:自動化CI/CD(高級功能)
Pages:免費托管靜態網站(適合前端項目展示)
四、Git高級技巧
4.1 后悔藥系列
# 撤銷工作區修改
git checkout -- 文件名# 撤銷暫存區修改
git reset HEAD 文件名# 回退到某個commit
git reset --hard commit哈希值# 不小心reset錯了?別慌!
git reflog # 查看所有操作記錄
git reset --hard 哈希值 # 回到未來
4.2 .gitignore:讓Git"眼不見為凈"
在項目根目錄創建
.gitignore
文件,內容示例:# 忽略node_modules
node_modules/# 忽略IDE配置文件
.idea/
.vscode/# 忽略系統文件
.DS_Store# 忽略日志文件
*.log
五、Git最佳實踐
-
提交信息規范:
-
feat: 新功能
-
fix: bug修復
-
docs: 文檔變更
-
style: 代碼格式化
-
refactor: 代碼重構
-
test: 測試相關
-
chore: 構建過程或輔助工具的變動
-
-
分支命名規范:
-
feature/功能名
-
bugfix/問題描述
-
hotfix/緊急修復描述
-
-
提交頻率:
-
小步提交,每個提交只做一件事
-
不要一次性提交大量改動
-
六、常見問題Q&A
Q: 為什么我的git push
總是被拒絕?
A: 可能是因為遠程有更新你沒拉取,先執行git pull --rebase
再push
Q: 如何徹底刪除Git歷史中的大文件?
A: 使用git filter-branch
或BFG Repo-Cleaner工具
Q: Git和SVN有什么區別?
A: Git是分布式版本控制,每個開發者都有完整倉庫;SVN是集中式,必須聯網工作
七、實戰案例:用GitHub協作開發TodoList
-
創建GitHub倉庫
-
克隆到本地
-
創建dev分支
-
開發功能并提交
-
發起PR
-
代碼審查
-
合并到main分支
八、Git冷知識
-
Git的創造者是Linus Torvalds,也是Linux之父
-
GitHub被微軟以75億美元收購
-
Git的logo是一只章魚貓(Octocat)
-
全球最大的開源社區GitHub有超過1億個倉庫
結語:從"Git小白"到"版本控制大師"
記住,Git就像學自行車——剛開始可能會摔幾次,但一旦掌握,就能自由馳騁!現在就去GitHub上找一個感興趣的開源項目,提交你的第一個PR吧!
思考題:
-
如果兩個開發者同時修改了同一個文件的同一行代碼,Git會如何處理?
-
如何用Git統計項目的代碼行數?
-
Git的"rebase"和"merge"有什么區別?分別在什么場景下使用?
歡迎在評論區分享你的Git使用心得或遇到的奇葩問題