代码仓库使用说明与git操作命令汇总

代码仓库使用说明与操作命令汇总

目录

代码仓库使用说明与操作命令汇总

📦 Git 基本配置

首次配置

实用的全局配置

🔄 仓库操作

克隆仓库

初始化新仓库

📝 日常开发流程

查看状态与差异

添加与提交

撤销操作

🌿 分支管理

基本分支操作

合并与变基

📤 远程协作

推送与拉取

解决冲突流程

🍴 Fork 工作流详解

什么是 Fork?

Fork 工作流程步骤

步骤1:Fork 仓库(在 GitHub/GitLab 界面上操作)

步骤2:本地设置

步骤3:同步上游更新

步骤4:开发新功能

步骤5:创建 Pull Request (PR)

步骤6:处理 PR 反馈

步骤7:PR 合并后的清理

Fork 工作流最佳实践

🏷️ 标签管理

📊 查看历史与日志

🧹 清理与维护

🔧 高级操作与技巧

储藏(Stash)操作

二分查找(Debug神器)

子模块管理

重写历史(谨慎使用!)

🚀 实际工作流示例

GitHub Flow(简单工作流)

Git Flow(复杂项目工作流)

💡 实用技巧与小贴士

1. 配置别名提高效率

2. 查找问题引入的提交

3. 大文件处理

4. 备份与恢复

🎯 总结建议

日常使用黄金法则

遇到问题时的排查顺序

团队协作规范


📦 Git 基本配置

首次配置

bash

# 设置用户名和邮箱(提交时会使用这些信息标识作者)
git config --global user.name "你的姓名"
git config --global user.email "你的邮箱"

# 设置默认编辑器(可选)
git config --global core.editor "vim"  # 或 vscode, nano 等

# 开启颜色显示(增强可读性)
git config --global color.ui auto

# 查看配置
git config --list                    # 查看所有配置
git config user.name                 # 查看特定配置项

实用的全局配置

bash

# 设置别名,简化常用命令
git config --global alias.co checkout      # git co = git checkout
git config --global alias.br branch        # git br = git branch
git config --global alias.ci commit        # git ci = git commit
git config --global alias.st status        # git st = git status

# 设置自动换行符处理(跨平台协作)
git config --global core.autocrlf input   # Linux/Mac
git config --global core.autocrlf true    # Windows

# 设置推送默认行为(Git 2.0+ 推荐)
git config --global push.default simple

🔄 仓库操作

克隆仓库

bash

# 克隆远程仓库到当前目录
git clone <仓库URL>
# 示例:git clone https://github.com/user/repo.git

# 克隆到指定目录
git clone <仓库URL> <目录名>

# 克隆指定分支(不克隆默认分支)
git clone -b <分支名> <仓库URL>
# 示例:git clone -b develop https://github.com/user/repo.git

# 克隆指定深度(适用于大仓库或只需要最新版本)
git clone --depth=1 <仓库URL>  # 只克隆最近一次提交

# 递归克隆(包含子模块)
git clone --recursive <仓库URL>

初始化新仓库

bash

# 在当前目录初始化新的 Git 仓库
git init

# 初始化并指定默认分支名(Git 2.28+)
git init -b main  # 替代之前的 master

# 查看仓库状态
git status

# 添加远程仓库(关联远程仓库)
git remote add origin <仓库URL>
# 示例:git remote add origin https://github.com/user/repo.git

# 查看已配置的远程仓库
git remote -v      # 显示详细信息(URL)
git remote show origin  # 显示远程仓库详细信息

# 修改远程仓库 URL
git remote set-url origin <新URL>

# 移除远程仓库
git remote remove origin

📝 日常开发流程

查看状态与差异

bash

# 查看工作区、暂存区状态
git status                    # 详细状态
git status -s                 # 简洁状态(两列显示:暂存区 | 工作区)
# ?? = 未跟踪,A = 新增,M = 修改,D = 删除

# 查看具体修改内容
git diff                      # 查看工作区和暂存区的差异
git diff --staged             # 查看暂存区和仓库的差异(--cached 同义)
git diff HEAD                 # 查看工作区和最新提交的差异
git diff <commit>             # 与指定提交比较

# 比较分支差异
git diff branch1..branch2     # 比较两个分支的最新提交
git diff branch1...branch2    # 比较共同祖先和branch2的差异

添加与提交

bash

# 添加文件到暂存区
git add <文件名>              # 添加单个文件
git add *.js                  # 添加所有.js文件
git add src/                  # 添加整个目录
git add .                     # 添加所有修改(不包括删除的文件)
git add -A                    # 添加所有变更(包括新增、修改、删除)
git add -u                    # 添加已跟踪文件的变更(不包括新增)

# 交互式添加(推荐,可以审查每个修改)
git add -p                    # 逐个审查每个修改块
# 选项:y-暂存,n-不暂存,s-分割块,e-手动编辑,q-退出

# 提交更改
git commit -m "提交说明"      # 标准提交
git commit -m "标题" -m "详细描述"  # 多行提交信息

# 快速提交(跳过暂存区,只对已跟踪文件有效)
git commit -am "提交说明"

# 修改最后一次提交
git commit --amend            # 修改提交信息或添加遗漏文件
git commit --amend --no-edit  # 只修改内容,不修改提交信息

撤销操作

bash

# 1. 撤销工作区的修改(危险!不可恢复)
git checkout -- <文件名>      # 丢弃工作区单个文件的修改
git checkout -- .             # 丢弃所有修改

# 2. 取消暂存(将文件从暂存区移回工作区)
git reset HEAD <文件名>       # 取消单个文件的暂存
git reset HEAD                # 取消所有文件的暂存

# 3. 撤销提交但保留修改
git reset --soft HEAD~1       # 撤销最后一次提交,修改保留在暂存区

# 4. 撤销提交和修改(危险!)
git reset --hard HEAD~1       # 彻底撤销最后一次提交和所有修改
git reset --hard <commit-id>  # 回退到指定提交

# 5. 恢复误删文件
git checkout <commit-id> -- <文件名>  # 从指定提交恢复文件

# 6. 恢复误删的提交(使用 reflog)
git reflog                    # 查看操作历史
git reset --hard HEAD@{n}     # 恢复第n次操作前的状态

🌿 分支管理

基本分支操作

bash

# 查看分支
git branch                    # 查看本地分支(* 表示当前分支)
git branch -r                 # 查看远程分支
git branch -a                 # 查看所有分支(本地+远程)

# 创建分支
git branch <分支名>           # 创建分支但不切换
git branch -m <新分支名>      # 重命名当前分支
git branch -m <旧名> <新名>   # 重命名指定分支

# 切换分支
git checkout <分支名>         # 切换到已有分支
git checkout -                # 切换到上一个分支(快速切换)

# 创建并切换分支(常用)
git checkout -b <分支名>      # 基于当前分支创建新分支
git checkout -b <新分支> <起点分支/commit>  # 基于指定起点创建

# 删除分支
git branch -d <分支名>        # 安全删除(已合并的分支)
git branch -D <分支名>        # 强制删除(未合并的分支)

合并与变基

bash

# 合并分支(将其他分支合并到当前分支)
git merge <分支名>            # 普通合并
git merge --no-ff <分支名>    # 禁用快进合并(保留分支历史)
git merge --squash <分支名>   # 压缩合并(将多个提交合并为一个)

# 变基操作(重写提交历史,保持线性)
git rebase <分支名>           # 将当前分支变基到目标分支
git rebase -i HEAD~n          # 交互式变基(合并/修改最近n次提交)

# 变基操作控制
git rebase --continue         # 解决冲突后继续变基
git rebase --skip             # 跳过当前提交
git rebase --abort            # 中止变基操作

# 注意事项:
# 1. 不要在公共分支上变基(会重写历史,影响他人)
# 2. 变基适合个人分支整理历史,合并适合团队协作

📤 远程协作

推送与拉取

bash

# 拉取更新
git pull                      # 拉取并合并(git fetch + git merge)
git pull --rebase             # 拉取并变基(保持线性历史)
git pull origin <分支名>      # 拉取指定分支

# 仅获取不合并
git fetch                     # 获取所有远程更新
git fetch origin              # 获取origin的更新
git fetch --prune             # 获取并清理已删除的远程分支

# 推送到远程
git push                      # 推送到关联的上游分支
git push origin <分支名>      # 推送到指定分支
git push -u origin <分支名>   # 首次推送并设置上游分支(以后只需git push)

# 强制推送(危险!会覆盖远程历史)
git push --force              # 强制推送(不推荐)
git push --force-with-lease   # 安全强制推送(检查是否有其他人推送)

# 删除远程分支
git push origin --delete <分支名>
git push origin :<分支名>     # 另一种删除语法

解决冲突流程

bash

# 1. 在开始工作前先拉取最新代码
git checkout main
git pull origin main

# 2. 开发完成后再次拉取,确保代码最新
git pull origin main

# 3. 如果发生冲突,Git会提示
# CONFLICT (content): Merge conflict in <文件名>

# 4. 查看冲突文件,冲突标记如下:
# <<<<<<< HEAD
# 当前分支的代码
# =======
# 要合并的代码
# >>>>>>> branch-name

# 5. 手动解决冲突后标记为已解决
git add <已解决的文件>

# 6. 完成合并
git commit  # Git会自动生成合并信息

# 7. 或者使用合并工具
git mergetool  # 使用配置的合并工具(如 vimdiff, kdiff3)

🍴 Fork 工作流详解

什么是 Fork?

text

原始仓库 (upstream/original)   你 Fork 的仓库 (origin)   你的本地仓库 (local)
      ↑                               ↑                      ↑
 原作者仓库                       你的远程副本            你的开发环境

Fork 工作流程步骤

步骤1:Fork 仓库(在 GitHub/GitLab 界面上操作)
  1. 访问原始仓库页面

  2. 点击右上角的 "Fork" 按钮

  3. 等待创建完成后,你会拥有一个自己的副本

步骤2:本地设置

bash

# 克隆你 Fork 的仓库到本地
git clone https://github.com/你的用户名/仓库名.git

# 进入项目目录
cd 仓库名

# 添加上游仓库(原始仓库)
git remote add upstream https://github.com/原始作者/仓库名.git

# 查看远程仓库配置
git remote -v
# 应该看到:
# origin    https://github.com/你的用户名/仓库名.git (fetch)
# origin    https://github.com/你的用户名/仓库名.git (push)
# upstream  https://github.com/原始作者/仓库名.git (fetch)
# upstream  https://github.com/原始作者/仓库名.git (push)
步骤3:同步上游更新

bash

# 方法1:通过 upstream 同步
# 1. 获取上游仓库的更新
git fetch upstream

# 2. 切换到本地主分支
git checkout main

# 3. 合并上游的更新到本地
git merge upstream/main

# 4. 推送到你自己的远程仓库(origin)
git push origin main

# 方法2:使用 pull 命令(简化版)
git checkout main
git pull upstream main
git push origin main
步骤4:开发新功能

bash

# 1. 从最新主分支创建功能分支(重要!避免冲突)
git checkout main
git pull upstream main      # 确保基于最新代码
git checkout -b feature/新功能名称

# 2. 开发代码,多次提交
git add .
git commit -m "实现XX功能"

# 3. 推送到你自己的远程仓库
git push -u origin feature/新功能名称
步骤5:创建 Pull Request (PR)   拉取请求
  1. 访问你的 GitHub 仓库页面

  2. 点击 "Compare & pull request"

  3. 填写 PR 描述:

    • 解决的问题

    • 实现的功能

    • 测试情况

    • 相关 Issue 链接

步骤6:处理 PR 反馈

bash

# 如果上游要求修改
# 1. 在本地功能分支上修改
git checkout feature/新功能名称

# 2. 进行修改并提交
git add .
git commit -m "根据反馈修改XX"

# 3. 推送到你的远程仓库(PR会自动更新)
git push origin feature/新功能名称

# 如果需要合并上游最新代码到你的分支
git checkout feature/新功能名称
git fetch upstream
git merge upstream/main
# 解决可能的冲突,然后推送
git push origin feature/新功能名称
步骤7:PR 合并后的清理

bash

# 1. 删除远程功能分支(在 GitHub 上或命令行)
git push origin --delete feature/新功能名称

# 2. 删除本地功能分支
git branch -d feature/新功能名称

# 3. 同步本地主分支
git checkout main
git pull upstream main
git push origin main

Fork 工作流最佳实践

bash

# 1. 保持主分支干净
git checkout main
git fetch upstream
git reset --hard upstream/main  # 使本地main与上游完全一致

# 2. 使用清晰的命名规范
# 功能分支:feature/功能名称
# 修复分支:bugfix/问题描述
# 文档分支:docs/文档类型
# 发布分支:release/版本号

# 3. 定期同步上游
# 可以设置为每周执行一次
git checkout main
git pull upstream main
git push origin main

# 4. 一个PR对应一个功能/修复
# 不要在一个分支上做多件事
# 每个PR应该专注于解决一个问题

🏷️ 标签管理

bash

# 查看标签
git tag                      # 查看所有标签(按字母排序)
git tag -l "v1.*"            # 查看匹配模式的标签

# 创建标签
git tag v1.0.0               # 创建轻量标签(只有标签名)
git tag -a v1.0.0 -m "发布版本1.0.0"  # 创建附注标签(包含信息)

# 给历史提交打标签
git tag -a v0.9.0 <commit-id> -m "版本0.9.0"

# 推送标签到远程
git push origin v1.0.0       # 推送单个标签
git push origin --tags       # 推送所有标签

# 删除标签
git tag -d v1.0.0            # 删除本地标签
git push origin --delete v1.0.0  # 删除远程标签

# 检出标签(进入分离头指针状态)
git checkout v1.0.0

📊 查看历史与日志

bash

# 基本日志查看
git log                      # 详细提交历史
git log --oneline            # 简洁显示(一行一个提交)
git log --graph              # 图形化显示分支合并历史
git log --all --graph        # 显示所有分支的图形化历史

# 带统计信息的日志
git log --stat               # 显示文件变更统计
git log --shortstat          # 只显示变更统计摘要

# 查看具体修改
git log -p                   # 显示每次提交的具体修改内容
git log -p -2                # 显示最近2次提交的修改

# 按条件筛选
git log --since="2024-01-01" # 指定时间之后的提交
git log --until="2024-12-31" # 指定时间之前的提交
git log --author="姓名"      # 按作者筛选
git log --grep="关键字"      # 按提交信息筛选
git log -S "函数名"          # 按代码内容筛选(搜索添加/删除该字符串的提交)

# 格式化输出
git log --pretty=format:"%h - %an, %ar : %s"
# 常用占位符:
# %h = 简短哈希值
# %an = 作者姓名
# %ar = 相对时间
# %s = 提交信息
# %ad = 日期

🧹 清理与维护

bash

# 清理未跟踪文件
git clean -n                 # 预览将要清理的文件(dry-run)
git clean -f                 # 强制清理文件
git clean -fd                # 清理文件和目录
git clean -x                 # 清理包括忽略文件在内的所有未跟踪文件

# 优化仓库
git gc                       # 垃圾回收(清理松散对象)
git gc --aggressive          # 深度清理
git prune                    # 清理悬挂对象

# 修复损坏的仓库
git fsck                     # 检查仓库完整性
git reflog expire --expire=now --all  # 清理过期的reflog
git gc --prune=now           # 立即清理

🔧 高级操作与技巧

储藏(Stash)操作

bash

# 临时保存未提交的修改
git stash                    # 储藏当前修改
git stash save "工作说明"    # 储藏并添加描述
git stash -u                 # 储藏包括未跟踪文件

# 查看储藏列表
git stash list               # 显示所有储藏
git stash show stash@{0}     # 查看指定储藏的改动

# 应用储藏
git stash pop                # 应用最近储藏并删除
git stash apply              # 应用但不删除
git stash apply stash@{n}    # 应用指定储藏

# 删除储藏
git stash drop stash@{n}     # 删除指定储藏
git stash clear              # 清空所有储藏

# 从储藏创建分支
git stash branch <新分支名>  # 基于储藏创建分支并应用

二分查找(Debug神器)

bash

# 用于定位引入bug的提交
git bisect start             # 开始二分查找
git bisect bad               # 标记当前提交为有bug
git bisect good <commit-id>  # 标记已知的好版本

# 之后Git会自动跳到中间提交,你进行测试
# 如果是好的:git bisect good
# 如果是坏的:git bisect bad

# 重复直到找到第一个坏提交
git bisect reset             # 结束二分查找,回到开始状态

# 自动化测试示例
git bisect start HEAD v1.0.0  # 从当前到v1.0.0之间查找
git bisect run npm test       # 自动运行测试脚本

子模块管理

bash

# 添加子模块
git submodule add <仓库URL> <路径>

# 克隆包含子模块的仓库
git clone --recursive <仓库URL>  # 递归克隆所有子模块
# 或者克隆后初始化
git submodule init
git submodule update

# 更新子模块
git submodule update --remote    # 更新到远程最新
git submodule foreach git pull   # 更新所有子模块

# 删除子模块(需要多步)
# 1. 删除子模块目录
# 2. 删除.gitmodules中的对应条目
# 3. 删除.git/config中的对应条目
# 4. 提交更改

重写历史(谨慎使用!)

bash

# 修改多个提交信息
git rebase -i HEAD~3          # 修改最近3次提交
# 交互界面中可以选择:
# pick = 使用提交
# reword = 使用提交但修改信息
# edit = 使用提交但暂停修改
# squash = 合并到前一个提交
# fixup = 合并并丢弃信息

# 修改已推送的提交(强制推送)
# 1. 本地修改历史
git rebase -i HEAD~n
# 2. 强制推送到远程
git push --force-with-lease

# 注意:重写已共享的历史会给协作者带来麻烦

🚀 实际工作流示例

GitHub Flow(简单工作流)

bash

# 1. 基于main创建功能分支
git checkout main
git pull origin main
git checkout -b add-user-authentication

# 2. 开发并定期提交
git add .
git commit -m "添加用户登录功能"

# 3. 推送到远程并创建PR
git push -u origin add-user-authentication
# 然后在GitHub界面创建Pull Request

# 4. 根据Review修改
git add .
git commit -m "根据review修复登录验证逻辑"
git push origin add-user-authentication

# 5. PR合并后清理
git checkout main
git pull origin main
git branch -d add-user-authentication

Git Flow(复杂项目工作流)

bash

# 初始化Git Flow
git flow init
# 使用默认分支名称或自定义:
# - main: 生产分支
# - develop: 开发分支
# - feature/*: 功能分支
# - release/*: 发布分支
# - hotfix/*: 热修复分支

# 开始新功能
git flow feature start new-feature
# 相当于:git checkout -b feature/new-feature develop

# 完成功能
git flow feature finish new-feature
# 合并到develop并删除分支

# 开始发布
git flow release start 1.0.0

# 完成发布
git flow release finish 1.0.0
# 合并到main和develop,打标签

💡 实用技巧与小贴士

1. 配置别名提高效率

bash

# 添加到 ~/.gitconfig 或使用命令配置
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
git config --global alias.who "shortlog -s -n"  # 贡献者统计
git config --global alias.unstage "reset HEAD --"  # 取消暂存

2. 查找问题引入的提交

bash

# 查找谁修改了某行代码
git blame <文件名>            # 显示每行代码的最后修改信息
git blame -L 10,20 <文件名>   # 查看10-20行的修改历史

# 查找包含特定字符串的提交
git log -p --grep="TODO"      # 查找包含TODO的提交
git log -S "functionName"     # 查找添加或删除该函数的提交

3. 大文件处理

bash

# 查看仓库大小
git count-objects -vH

# 查找大文件
git rev-list --objects --all | \
  git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | \
  awk '/^blob/ {print substr($0,6)}' | \
  sort --numeric-sort --key=2 | \
  tail -10 | \
  cut --complement --characters=13-40

# 使用Git LFS(Large File Storage)管理大文件
git lfs install              # 初始化LFS
git lfs track "*.psd"        # 跟踪大文件类型

4. 备份与恢复

bash

# 创建完整备份
git bundle create repo.bundle --all  # 打包所有分支和历史

# 从备份恢复
git clone repo.bundle repo-backup -b main

# 创建补丁文件
git format-patch HEAD~3             # 最近3次提交的补丁
git am < 补丁文件                    # 应用补丁

🎯 总结建议

日常使用黄金法则

  1. 提交前先拉取git pull --rebase 保持历史线性

  2. 小步提交:每个提交解决一个问题,便于回滚和审查

  3. 清晰的信息:提交信息遵循"类型: 描述"格式,如 feat: 添加用户登录

  4. 分支管理:一个功能一个分支,命名规范清晰

  5. 定期同步:保持本地仓库与远程同步

遇到问题时的排查顺序

  1. git status - 查看当前状态

  2. git diff - 查看具体修改

  3. git log --oneline --graph - 查看历史

  4. git reflog - 查看操作记录(找回误删内容)

团队协作规范

  1. 主分支保护:main/master 分支应设置保护,禁止直接推送

  2. Code Review:所有修改通过 Pull Request 合并

  3. CI/CD集成:自动化测试和部署

  4. 文档更新:代码变更时同步更新文档

记住:Git 是一个强大的工具,掌握它能极大提高开发效率。当遇到复杂情况时,不要害怕实验(可以在测试仓库中练习),熟练后你会爱上它的强大功能!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值