Fan.Lai's blog

git操作

Git 完整操作流程指南

📋 目录

  1. 项目初始化与本地仓库创建
  2. 文件管理与版本迭代
  3. 历史版本管理
  4. 远程仓库操作
  5. 分支管理
  6. 常见问题与解决方案

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 restoregit 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  # 需要强制推送
posted @ 2026-06-28 14:29  凡琪7  阅读(1)  评论(0)    收藏  举报