Git 入门教程
本文详细介绍了 Git 版本控制系统的入门知识,包括环境安装、用户配置、仓库初始化、文件暂存与提交、版本回退、分支管理、远程仓库操作及标签管理等核心功能。此外,还涵盖了常见问题的解决方案、Git 工作流(如集中式、功能分支、Git Flow)以及团队协作的最佳实践,旨在帮助开发者快速上手并高效管理代码版本。

本文详细介绍了 Git 版本控制系统的入门知识,包括环境安装、用户配置、仓库初始化、文件暂存与提交、版本回退、分支管理、远程仓库操作及标签管理等核心功能。此外,还涵盖了常见问题的解决方案、Git 工作流(如集中式、功能分支、Git Flow)以及团队协作的最佳实践,旨在帮助开发者快速上手并高效管理代码版本。

安装完成后,在开始菜单中找到 Git Bash 打开。
查看 Git 版本,检测是否安装成功:
git --version
配置用户名和邮箱(必须):
git config --global user.name "你的名字"
git config --global user.email "[email protected]"
查看所有配置信息:
git config --global --list
ssh-keygen -t rsa -C "[email protected]"
操作步骤:
~/.ssh/id_rsa)C:\Users\你的用户名\.ssh\id_rsa.pub~/.ssh/id_rsa.pubid_rsa.pub 文件,复制全部内容# GitHub
ssh -T [email protected]
# GitLab
ssh -T [email protected]
成功会显示:Hi username! You've successfully authenticated...
mkdir my_project
cd my_project
git init
执行后会创建 .git 隐藏文件夹(Git 仓库核心,不要删除)
# 创建 README 文件
touch README.md
# 添加到暂存区
git add README.md
# 提交到本地仓库
git commit -m "Initial commit"
# 添加远程仓库
git remote add origin <远程仓库 URL>
# 推送到远程
git push -u origin main
rm -rf .git
直接从远程服务器克隆现有仓库:
git clone <远程仓库 URL>
示例:
git clone https://github.com/username/repo.git
克隆指定分支:
git clone -b <分支名> <远程仓库 URL>
工作区 (Working Directory) ↓ git add 暂存区 (Staging Area) ↓ git commit 本地仓库 (Local Repository) ↓ git push 远程仓库 (Remote Repository)
| 区域 | 说明 |
|---|---|
| 工作区 | 本地计算机上的项目目录,可以直接编辑文件 |
| 暂存区 | 临时存储区,保存即将提交的修改 |
| 本地仓库 | Git 存储项目历史记录的地方 |
| 远程仓库 | 托管在服务器上的仓库(如 GitHub) |
| 状态 | 说明 | 命令 |
|---|---|---|
| 已修改 (Modified) | 文件已修改但未暂存 | git add 进入暂存 |
| 已暂存 (Staged) | 文件已添加到暂存区 | git commit 提交 |
| 已提交 (Committed) | 文件已保存到本地仓库 | git push 推送 |
git status
echo "Hello World" > file1.txt
cat file1.txt
git status
添加单个文件:
git add file1.txt
添加多个文件:
git add file1.txt file2.txt
添加所有 txt 文件:
git add *.txt
添加当前目录所有文件:
git add .
带提交信息:
git commit -m "提交说明"
打开编辑器编写详细信息:
git commit
一次性添加并提交(仅已跟踪文件):
git commit -am "提交说明"
# 查看详细历史
git log
# 单行显示
git log --oneline
# 图形化显示
git log --graph --oneline
# 查看最近 3 次提交
git log -3
git log --oneline
输出示例:
a1b2c3d (HEAD -> main) 第三次提交
e4f5g6h 第二次提交
i7j8k9l 第一次提交
| 命令 | 工作区 | 暂存区 | 本地仓库 | 使用场景 |
|---|---|---|---|---|
git reset --soft | 保留 | 保留 | 回退 | 重新提交 |
git reset --mixed | 保留 | 清空 | 回退 | 重新暂存(默认) |
git reset --hard | 清空 | 清空 | 回退 | 完全放弃修改 |
回退但保留修改:
git reset --soft HEAD^
回退并取消暂存:
git reset --mixed HEAD^ # 或 git reset HEAD^
回退并丢弃所有修改:
git reset --hard HEAD^
git reset --hard <commit-id>
示例:
git reset --hard e4f5g6h
# 撤销单个文件
git checkout -- file1.txt # 新版命令
git restore file1.txt
# 取消暂存单个文件
git reset HEAD file1.txt # 新版命令
git restore --staged file1.txt
git reflog
可以找到所有提交的 commit-id,即使已经回退也能找回。
# 查看本地分支
git branch
# 查看所有分支(含远程)
git branch -a
# 查看远程分支
git branch -r
git branch <分支名>
git checkout <分支名># 新版命令
git switch <分支名>
git checkout -b <分支名># 新版命令
git switch -c <分支名>
# 切换到目标分支
git checkout main
# 合并指定分支到当前分支
git merge <分支名>
# 删除已合并分支
git branch -d <分支名># 强制删除分支
git branch -D <分支名>
当合并出现冲突时:
# 1. 查看冲突文件
git status
# 2. 手动编辑冲突文件,删除冲突标记
<<<<<<< HEAD
当前分支的内容
=======
要合并分支的内容
>>>>>>> branch-name
# 3. 标记为已解决
git add <冲突文件>
# 4. 完成合并
git commit -m "解决冲突"
git remote -v
git remote add origin <远程仓库 URL>
# 首次推送
git push -u origin main
# 后续推送
git push
# 拉取并合并
git pull origin main
# 等同于
git fetch origin
git merge origin/main
git clone <远程仓库 URL>
git push origin --delete <分支名>
解决方案:
# 撤销最后一次提交,保留修改
git reset --soft HEAD^
# 重新添加正确的文件
git add <正确的文件>
git commit -m "正确的提交"
git commit --amend -m "新的提交信息"
# 暂存当前工作
git stash
# 切换到正确分支
git checkout <正确分支>
# 恢复工作
git stash pop
# 从暂存区恢复
git checkout -- <文件名>
# 从指定提交恢复
git checkout <commit-id> -- <文件名>
原因:远程仓库有新提交
解决方案:
# 先拉取远程更新
git pull origin main
# 解决冲突后再推送
git push origin main
原因:文件已被跟踪
解决方案:
# 从 Git 中移除但保留本地文件
git rm --cached <文件名>
# 提交更改
git commit -m "更新.gitignore"
# 编译文件
*.class
*.o
*.pyc
# 日志文件
*.log
# 依赖目录
node_modules/
vendor/
# IDE 配置
.idea/
.vscode/
*.iml
# 系统文件
.DS_Store
Thumbs.db
# 环境配置
.env
config.local.js
# 创建轻量标签
git tag v1.0
# 创建附注标签(推荐)
git tag -a v1.0 -m "版本 1.0 发布"
# 为指定提交打标签
git tag -a v0.9 <commit-id> -m "版本 0.9"
# 查看所有标签
git tag
# 查看标签详情
git show v1.0
# 查看符合模式的标签
git tag -l "v1.*"
# 推送单个标签
git push origin v1.0
# 推送所有标签
git push origin --tags
# 删除本地标签
git tag -d v1.0
# 删除远程标签
git push origin --delete v1.0
适合小团队,所有人在 main 分支上工作。
# 拉取最新代码
git pull origin main
# 开发并提交
git add
git commit -m "新功能"
# 推送
git push origin main
每个功能在独立分支开发。
# 创建功能分支
git checkout -b feature/login
# 开发并提交
git add
git commit -m "实现登录功能"
# 推送到远程
git push origin feature/login
# 合并到 main
git checkout main
git merge feature/login
# 删除功能分支
git branch -d feature/login
适合大型项目,有明确的发布周期。
分支类型:
main:生产环境代码develop:开发分支feature/*:功能分支release/*:发布分支hotfix/*:紧急修复分支# 从 develop 创建功能分支
git checkout -b feature/new-feature develop
# 完成后合并回 develop
git checkout develop
git merge feature/new-feature
# 准备发布
git checkout -b release/1.0 develop
# 发布后合并到 main 和 develop
git checkout main
git merge release/1.0
git tag -a v1.0 -m "版本 1.0"
git checkout develop
git merge release/1.0
# 暂存当前修改
git stash
# 查看暂存列表
git stash list
# 恢复最近的暂存
git stash pop
# 恢复指定暂存
git stash apply stash@{0}
# 删除暂存
git stash drop stash@{0}
# 清空所有暂存
git stash clear
# 修改最后一次提交
git commit --amend -m "新的提交信息"
# 合并最近 3 次提交
git rebase -i HEAD~3 # 在编辑器中将 pick 改为 squash
# 查看工作区与暂存区差异
git diff
# 查看暂存区与仓库差异
git diff --staged
# 查看两个分支差异
git diff branch1 branch2
# 查看指定文件差异
git diff file.txt
# 重命名文件
git mv old.txt new.txt
# 删除文件
git rm file.txt
# 仅从 Git 删除,保留本地
git rm --cached file.txt
# 按作者查找
git log --author="张三"
# 按日期查找
git log --since="2025-01-01" --until="2025-12-31"
# 按提交信息查找
git log --grep="修复"
# 查看文件修改历史
git log --follow file.txt
# 查看谁修改了某行代码
git blame file.txt
# 1. Fork 项目到自己账号
# 2. 克隆 Fork 的仓库
git clone <你的 Fork 仓库 URL>
# 3. 添加上游仓库
git remote add upstream <原始仓库 URL>
# 4. 创建功能分支
git checkout -b feature/new-feature
# 5. 提交修改
git add
git commit -m "新功能"
git push origin feature/new-feature
# 6. 在 GitHub 上创建 Pull Request
# 7. 同步上游更新
git fetch upstream
git checkout main
git merge upstream/main
git push origin main
| 命令 | 说明 |
|---|---|
git init | 初始化仓库 |
git clone <url> | 克隆仓库 |
git status | 查看状态 |
git add . | 添加所有文件 |
git commit -m "msg" | 提交 |
git push | 推送 |
git pull | 拉取 |
git branch | 查看分支 |
git checkout -b <name> | 创建并切换分支 |
git merge <branch> | 合并分支 |
git log --oneline | 查看历史 |
git reset --hard <id> | 回退版本 |
git stash | 暂存工作 |
<type>(<scope>): <subject>
<body>
<footer>
type 类型:
feat:新功能fix:修复 bugdocs:文档更新style:代码格式refactor:重构test:测试chore:构建/工具示例:
feat(login): 添加记住密码功能
- 添加记住密码复选框
- 实现本地存储逻辑
- 添加自动登录功能
Closes #123
学完本教程后,建议:

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online