git操作
Git 完整操作流程指南
📋 目录
1. 项目初始化与本地仓库创建
1.1 创建新项目
# 创建项目目录
mkdir my-project
cd my-project
# 初始化 Git 仓库
git init
# 配置用户信息(首次使用)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# 查看配置
git config --list
1.2 首次提交
# 查看当前状态
git status
# 添加所有文件到暂存区
git add .
# 或添加特定文件
git add README.md index.js .gitignore
# 提交到本地仓库
git commit -m "Initial commit"
# 查看提交历史
git log --oneline
2. 文件管理与版本迭代
2.1 基本操作流程
# 1. 修改文件或创建新文件后,查看改动,可以不查看也行
git status
git diff # 查看具体改动内容
# 3. 添加改动到暂存区
git add . # 添加所有改动文件
git add README.md # or 添加特定文件
# 4. 提交改动
git commit -m "改动描述" # 每次改动都要添加改动的描述
# 5. 查看提交历史
git log --oneline --graph --all
2.2 版本迭代标准流程
# 日常开发流程
git status # 1. 检查当前状态
git add . # 2. 暂存所有改动
git commit -m "feat: 功能描述" # 3. 提交
git push origin main # 4. 推送到远程(如果有),比如推送到github,gitee
# 提交信息规范(Commit Message 规范)
# feat: 新功能
# fix: 修复bug
# docs: 文档更新
# style: 代码格式调整
# refactor: 重构代码
# test: 测试用例
# chore: 构建/工具配置
# 示例
git commit -m "feat: 用户登录功能实现"
git commit -m "fix: 修复登录验证bug"
git commit -m "docs: 更新API文档"
2.3 撤销与修改
# 撤销暂存区(add 之后,commit 之前)
git reset HEAD <file> # 撤销特定文件
git reset HEAD . # 撤销所有文件
# 修改最后一次提交信息
git commit --amend -m "修正的提交信息"
# 添加忘记的文件到上一次提交
git add forgotten-file.js
git commit --amend --no-edit
# 撤销工作区修改(未 add)
git checkout -- <file> # 丢弃文件修改
git restore <file> # 新版本推荐
3. 历史版本管理
3.1 查看历史版本
# 查看所有提交历史
git log # 完整历史
git log --oneline # 简洁版
git log --oneline --graph # 图形化显示
git log --stat # 显示文件变更统计
git log -p # 显示具体改动内容
git log --author="张三" # 按作者筛选
# 查看特定文件的历史
git log --oneline -- README.md
git log -p -- index.js # 查看该文件的所有改动
# 查看某次提交的详细信息
git show <commit-hash>
git show <commit-hash> -- <file> # 查看特定文件在该提交的改动
3.2 恢复到历史版本
方法一:查看历史版本内容(不修改当前状态)
# 查看某个历史版本的文件内容
git show <commit-hash>:<file-path>
# 临时切换到历史版本(分离头指针状态)
git checkout <commit-hash>
# 查看后切回主分支
git checkout main
方法二:恢复单个文件
# 推荐方式(Git 2.23+)
git restore --source=<commit-hash> <file-path>
# 传统方式
git checkout <commit-hash> -- <file-path>
# 示例:恢复 README.md 到 3 个版本前
git restore --source=HEAD~3 README.md
方法三:回退整个版本,尽量用2(⚠️ 注意区分)
# 1. git reset - 移动指针,不保留历史
git reset --soft <commit-hash> # 保留改动在暂存区
git reset --mixed <commit-hash> # 保留改动在工作区(默认)
git reset --hard <commit-hash> # 完全删除所有改动(⚠️ 危险!)
# 示例:回退到前 2 个提交
git reset --hard HEAD~2
# 2. git revert - 创建新提交撤销改动(安全,推荐)
git revert <commit-hash>
git revert HEAD # 撤销最后一次提交
git revert HEAD~2..HEAD # 撤销最近 3 个提交
# 示例
git revert abc123 # 撤销 abc123 这次提交
方法四:导出历史版本
# 导出为压缩包
git archive --format=zip --output=version-v1.0.zip <commit-hash>
git archive --format=tar.gz --output=version-v1.0.tar.gz <commit-hash>
# 导出到新目录
git clone --branch <commit-hash> . ../old-version
实际操作流程
场景1:我只想恢复某个文件到旧版本
# 1. 查看提交历史
git log --oneline
# 2. 找到想要的提交哈希(如 abc123)
# 3. 恢复该文件
git restore --source=abc123 src/main.py
# 4. 提交恢复后的版本
git add src/main.py
git commit -m "恢复 main.py 到 abc123 版本"
场景2:我想整体下载旧版本
# 1. 克隆或进入仓库
# 2. 查看所有历史版本
git log --oneline --graph --all
# 3. 创建一个分支指向旧版本(不影响主分支)
git branch old-version abc123
# 4. 切换到旧版本分支查看
git checkout old-version
# 5. 如果确认要恢复,可以合并回主分支
快速参考对比
| 命令 | 影响范围 | 是否可逆 | 推荐场景 |
|---|---|---|---|
git checkout |
单个文件/整个项目 | ✅ 可逆 | 临时查看旧版本 |
git restore |
单个文件/整个项目 | ✅ 可逆 | 恢复单个文件(推荐) |
git reset --soft |
提交历史 | ✅ 可逆 | 撤销提交但保留改动 |
git reset --hard |
提交历史+文件 | ❌ 不可逆 | 完全放弃所有改动(慎用) |
git revert |
创建新提交 | ✅ 可逆 | 安全撤销提交(推荐) |
小技巧
查看提交历史,找到目标版本:
# 简洁版
git log --oneline -10
# 图形化版
git log --graph --pretty=oneline --abbrev-commit
# 带文件变更的
git log --stat
个人建议:
- 如果是个人实验,可以用
git restore或git reset - 如果是团队项目,优先用
git revert - 不确定时,先
git checkout看看,别急着reset --hard
3.3 版本标签管理
# 创建标签
git tag v1.0.0 # 轻量标签
git tag -a v1.0.0 -m "版本1.0.0发布" # 附注标签
git tag -a v1.0.0 <commit-hash> -m "标签描述" # 给历史提交打标签
# 查看标签
git tag # 列出所有标签
git show v1.0.0 # 查看标签详情
# 切换到标签版本
git checkout v1.0.0
# 删除标签
git tag -d v1.0.0
# 推送标签到远程
git push origin v1.0.0
git push origin --tags # 推送所有标签
4. 远程仓库操作
4.1 关联远程仓库
# 在 GitHub/GitLab 上创建空仓库后
# 方式一:添加远程仓库
git remote add origin https://github.com/username/my-project.git
# 方式二:SSH 方式(推荐)
git remote add origin git@github.com:username/my-project.git
# 查看远程仓库
git remote -v
git remote show origin
# 修改远程仓库地址
git remote set-url origin https://github.com/username/my-project.git
4.2 推送到远程
# 首次推送(设置上游分支)
git push -u origin main
# 后续推送
git push origin main
git push # 如果已设置上游分支
# 推送所有分支
git push --all origin
# 推送标签
git push origin --tags
# 强制推送(⚠️ 慎用)
git push --force origin main
git push --force-with-lease origin main # 更安全的强制推送
4.3 从远程拉取
# 拉取远程更新(推荐)
git pull origin main
# 等价于
git fetch origin main
git merge origin/main
# 只拉取不合并
git fetch origin
# 查看远程分支
git branch -r
git branch -a # 查看所有分支(包含远程)
# 拉取特定分支
git fetch origin feature-branch
git checkout -b feature-branch origin/feature-branch
4.4 克隆远程仓库
# 克隆仓库
git clone https://github.com/username/my-project.git
git clone git@github.com:username/my-project.git
# 克隆指定分支
git clone -b develop https://github.com/username/my-project.git
# 克隆到指定目录
git clone https://github.com/username/my-project.git my-new-folder
# 浅克隆(只克隆最新版本,速度快)
git clone --depth 1 https://github.com/username/my-project.git
5. 分支管理
5.1 基础分支操作
# 查看分支
git branch # 本地分支
git branch -r # 远程分支
git branch -a # 所有分支
# 创建分支
git branch feature-login # 创建分支
git checkout -b feature-login # 创建并切换
git switch -c feature-login # Git 2.23+ 推荐
# 切换分支
git checkout main
git switch main # Git 2.23+ 推荐
# 合并分支
git checkout main
git merge feature-login
# 删除分支
git branch -d feature-login # 删除本地分支
git branch -D feature-login # 强制删除未合并的分支
git push origin --delete feature-login # 删除远程分支
5.2 解决合并冲突
# 发生冲突时
git merge feature-branch
# 冲突文件会标记,需要手动解决
# 编辑冲突文件,保留需要的内容
# 解决后
git add .
git commit -m "merge: 解决合并冲突"
# 或终止合并
git merge --abort
# 使用编辑器工具解决冲突
git mergetool
5.3 变基操作(Rebase)
# 变基到主分支
git checkout feature-branch
git rebase main
# 交互式变基(压缩提交)
git rebase -i HEAD~3 # 合并最近 3 个提交
# 交互式变基中常用命令
# pick: 保留该提交
# reword: 修改提交信息
# edit: 修改提交内容
# squash: 合并到前一个提交
# fixup: 合并并丢弃信息
# drop: 删除提交
# 继续变基
git rebase --continue
# 跳过当前提交
git rebase --skip
# 终止变基
git rebase --abort
6. 常见问题与解决方案
6.1 快速参考命令表
| 操作 | 命令 |
|---|---|
| 初始化仓库 | git init |
| 查看状态 | git status |
| 添加文件 | git add . 或 git add <file> |
| 提交 | git commit -m "message" |
| 查看历史 | git log --oneline |
| 查看改动 | git diff |
| 撤销暂存 | git reset HEAD <file> |
| 恢复文件 | git restore --source=<hash> <file> |
| 回退版本(安全) | git revert <hash> |
| 回退版本(危险) | git reset --hard <hash> |
| 关联远程 | git remote add origin <url> |
| 推送 | git push origin main |
| 拉取 | git pull origin main |
| 创建分支 | git checkout -b <branch> |
| 合并分支 | git merge <branch> |
6.2 典型工作流程
个人项目完整流程
# 1. 初始化
mkdir my-project && cd my-project
git init
echo "# My Project" > README.md
git add .
git commit -m "Initial commit"
# 2. 创建远程仓库(在 GitHub 网页操作)
# 3. 关联远程
git remote add origin git@github.com:username/my-project.git
git push -u origin main
# 4. 日常开发
git add .
git commit -m "feat: 添加新功能"
git push origin main
# 5. 发布版本
git tag -a v1.0.0 -m "发布 v1.0.0"
git push origin v1.0.0
团队协作流程
# 1. 克隆项目
git clone git@github.com:username/project.git
cd project
# 2. 创建功能分支
git checkout -b feature/new-feature
# 3. 开发并提交
git add .
git commit -m "feat: 实现新功能"
git push origin feature/new-feature
# 4. 在 GitHub 创建 Pull Request
# 5. 代码审查通过后合并
# 6. 同步主分支更新
git checkout main
git pull origin main
git branch -d feature/new-feature
6.3 常用 Git 配置
# 配置别名(提高效率)
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.lg "log --oneline --graph --all"
# 配置编辑器
git config --global core.editor "vim"
# 配置颜色
git config --global color.ui auto
# 忽略文件权限变更
git config --global core.filemode false
# 配置 CRLF 处理(Windows/Linux 兼容)
git config --global core.autocrlf input
6.4 紧急恢复场景
# 场景1:误删除文件但未提交
git checkout -- <file> # 恢复
git restore <file> # 新版本推荐
# 场景2:误删提交(找回丢失的提交)
git reflog # 查看所有操作历史
git checkout <commit-hash> # 切换到丢失的提交
git branch recover-branch # 创建分支保存
# 场景3:撤销已经 push 的提交
git revert <commit-hash> # 创建反向提交
git push origin main
# 场景4:误删分支
git reflog # 找到分支最后的 commit
git checkout -b <branch-name> <commit-hash>
# 场景5:修改最后一次提交
git add forgotten-file
git commit --amend --no-edit
git push --force-with-lease origin main # 需要强制推送

浙公网安备 33010602011771号