为什么站长需要学会 Git
很多个人站长和小团队在管理网站代码时,习惯用 FTP 直接上传修改过的文件。这种做法在网站规模较小时还能应付,但当项目逐渐复杂、多人协作或者需要回滚错误修改时,FTP 的局限性就会暴露无遗。Git 作为目前最流行的分布式版本控制系统,已经成为现代网站开发和运维的必备技能。掌握 Git 意味着你可以随时回溯到任意历史版本,可以并行开发多个功能而互不干扰,可以与团队成员高效协作而不会出现覆盖冲突。
Git 基础概念
仓库(Repository)
仓库是 Git 用来存储项目历史记录的地方。你可以把它理解成一个特殊的文件夹,Git 会在其中记录每一次文件的变更。每个 Git 仓库都包含完整的项目历史和元数据,存储在一个名为 .git 的隐藏目录中。初始化一个仓库只需要一个命令:git init。
提交(Commit)
提交是 Git 的核心操作。每一次 commit 都像是给项目拍了一张快照,记录了当前所有文件的状态变化。每个 commit 都有一个唯一的 SHA-1 哈希值作为标识,方便你随时回溯到任意历史版本。好的提交习惯是:每次提交只包含一个逻辑功能点的变更,提交信息要简明扼要地描述做了什么以及为什么。
分支(Branch)
分支是 Git 最强大的特性之一。默认的分支叫做 main 或者 master,你可以创建新的分支来开发新功能、修复 Bug 或进行实验性修改,而不影响主分支的稳定性。开发完成后再将分支合并回主分支。这种模式使得多人并行开发成为可能。
Git 安装与初始配置
在 Linux 服务器上安装 Git 非常简单:
# Debian/Ubuntu 系统
apt update && apt install git -y
# CentOS/RHEL 系统
yum install git -y安装完成后,需要配置用户名和邮箱,这些信息会记录在你的每一次提交中:
git config --global user.name "你的名字"
git config --global user.email "your@email.com"查看配置是否生效:
git config --list如果不进行全局配置,Git 会提示你需要设置 user.name 和 user.email,推荐使用你在开发过程中常用的邮箱地址,这样在查看提交历史时能清晰知道是谁做了哪些修改。
常用 Git 工作流程
初始化仓库
cd /var/www/mywebsite
git init这个命令会在当前目录下创建一个 .git 隐藏文件夹,里面包含了仓库的所有元数据。如果你想删除版本控制信息,直接删除这个文件夹即可。
添加文件并提交
# 将文件添加到暂存区
git add index.html
git add style.css
# 或者添加所有变更文件
git add .
# 提交暂存区的变更
git commit -m "初始提交:网站首页和样式"建议每次提交只包含一个逻辑功能点的变更,这样后续查找问题和回滚时更加精准。不要一次性提交大量的无关修改,这会让代码审查变得困难。
查看历史记录
git log --oneline --graph这个命令会以图形化方式显示提交历史,每个 commit 会显示简短的哈希值和提交信息。加上 --graph 参数可以直观地看到分支合并情况。
撤销修改
# 撤销工作区的修改(尚未 git add)
git checkout -- filename
# 撤销暂存区的修改
git reset HEAD filename
# 回退到上一个版本
git reset --hard HEAD~1
# 回退到指定版本
git reset --hard commit-hash注意:使用 --hard 参数会丢弃当前工作区的所有未提交修改,请谨慎使用。
分支管理实战
创建和切换分支
# 创建新分支
git branch feature-new-theme
# 切换到新分支
git checkout feature-new-theme
# 创建并切换一步到位
git checkout -b feature-new-theme合并分支
# 先切回主线分支
git checkout main
# 将功能分支合并进来
git merge feature-new-theme合并时如果出现冲突,Git 会在冲突文件中标注出双方修改的内容,你需要手动编辑文件解决冲突,然后再次 add 和 commit。解决冲突是 Git 使用中比较考验经验的环节,熟悉之后会发现其实并不复杂。
删除分支
# 删除本地分支
git branch -d feature-new-theme
# 强制删除未合并的分支
git branch -D feature-new-theme远程仓库协作
对于个人站长来说,将代码推送到远程仓库有几个重要好处:代码云端备份、多设备同步、方便团队协作。常用的远程仓库平台有 GitHub、Gitee、GitLab 等。
添加远程仓库
git remote add origin https://github.com/yourname/mywebsite.git推送代码
git push -u origin main第一次推送时需要加 -u 参数建立本地分支和远程分支的关联,之后只需要 git push 即可。
拉取最新代码
git pull origin main建议在开始工作前先执行 git pull 同步远程的最新修改,避免在过时的代码基础上进行开发。
.gitignore 文件
在网站项目中,有些文件不应该被 Git 跟踪,比如配置文件中的敏感信息、缓存文件、日志文件等。创建一个 .gitignore 文件来排除它们:
# 系统文件
.DS_Store
Thumbs.db
# 配置文件(含密码)
.env
config/database.php
# 缓存目录
/cache/
/tmp/
# 日志文件
*.log
# 依赖包
node_modules/
vendor/.gitignore 文件中每一行代表一个忽略规则,支持通配符和目录匹配。养成在项目初始化时就创建 .gitignore 的好习惯,避免意外将敏感信息提交到仓库。
实际场景:网站改版流程
假设你要对网站进行一次完整的主题改版,一个规范的 Git 工作流程如下:
# 1. 从主分支创建改版分支
git checkout -b redesign-v2
# 2. 进行修改...
# (修改模板文件、CSS、JavaScript)
# 3. 分步提交
git add templates/
git commit -m "更新首页模板结构"
git add assets/css/
git commit -m "重新设计样式系统"
git add assets/js/
git commit -m "重构前端交互逻辑"
# 4. 合并回主分支
git checkout main
git merge redesign-v2
# 5. 部署到服务器
# (通过 CI/CD 或手动同步)
# 6. 删除已完成的分支
git branch -d redesign-v2使用这种工作流,即使改版过程中出现问题,也可以随时回到任何一个稳定的中间状态。如果改版失败,只需要 git merge --abort 即可恢复到改版前的状态。
Git 常用命令速查表
| 命令 | 作用 |
|---|---|
| git init | 初始化仓库 |
| git clone URL | 克隆远程仓库 |
| git status | 查看当前状态 |
| git diff | 查看具体修改内容 |
| git add . | 添加所有修改 |
| git commit -m | 提交修改 |
| git push | 推送到远程 |
| git pull | 从远程拉取 |
| git log | 查看历史 |
| git branch | 查看分支列表 |
| git checkout -b | 创建并切换分支 |
| git merge | 合并指定分支 |
| git stash | 暂存当前工作 |
| git stash pop | 恢复暂存的工作 |
总结
掌握 Git 不是一朝一夕的事,但只需要掌握上面这些常用命令和流程,就能在日常的网站开发运维中大幅提升效率。从今天开始,告别 FTP 直接覆盖文件的落后方式,用 Git 来管理你的每一个项目。坚持使用 Git 一段时间后,你会发现自己越来越离不开这个强大的工具,它将成为你技术工具箱中不可或缺的一部分。
Git 常见问题与解决方法
提交信息写错了怎么办
如果提交已经完成但还没有推送到远程仓库,可以使用 --amend 参数来修改最近的提交信息:
git commit --amend -m "修正后的提交信息"这个命令会修改最近一次提交的哈希值,因此在已经推送过的分支上使用时需要谨慎,最好在推送前修改。
不小心删除了重要文件
Git 的文件恢复能力是其核心理念之一。只要文件曾经被 Git 跟踪过,就可以从历史记录中恢复:
# 查看文件在哪个提交中被删除
git log --all --full-history -- filename
# 从指定提交中恢复文件
git checkout commit-hash^ -- filename如何忽略已经跟踪的文件
如果某个文件已经被 Git 跟踪,再将它加入 .gitignore 不会起作用。需要先从 Git 的跟踪中移除:
git rm --cached filename这个命令会从 Git 的索引中移除文件,但保留工作区的实际文件。之后再将该文件加入 .gitignore,Git 就会忽略它的后续变更。
善用 Git Hooks 实现自动化
Git Hooks 是 Git 提供的一种事件触发机制,可以在特定操作发生时自动执行脚本。对于站长来说,最实用的场景是使用 post-receive hook 实现代码推送后的自动部署:
#!/bin/bash
# 放置在远程仓库的 .git/hooks/post-receive
TARGET=/var/www/mywebsite
git --work-tree=$TARGET checkout -f
echo "部署完成"将服务器上的 Git 仓库配置好 post-receive hook 后,每次在本地执行 git push,服务器就会自动将代码更新到网站目录,省去了手动上传的麻烦。这是很多专业团队采用的部署方式,既简单又可靠。