代码仓库使用说明与操作命令汇总
目录
步骤1:Fork 仓库(在 GitHub/GitLab 界面上操作)
📦 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 界面上操作)
-
访问原始仓库页面
-
点击右上角的 "Fork" 按钮
-
等待创建完成后,你会拥有一个自己的副本
步骤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) 拉取请求
-
访问你的 GitHub 仓库页面
-
点击 "Compare & pull request"
-
填写 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 < 补丁文件 # 应用补丁
🎯 总结建议
日常使用黄金法则
-
提交前先拉取:
git pull --rebase保持历史线性 -
小步提交:每个提交解决一个问题,便于回滚和审查
-
清晰的信息:提交信息遵循"类型: 描述"格式,如
feat: 添加用户登录 -
分支管理:一个功能一个分支,命名规范清晰
-
定期同步:保持本地仓库与远程同步
遇到问题时的排查顺序
-
git status- 查看当前状态 -
git diff- 查看具体修改 -
git log --oneline --graph- 查看历史 -
git reflog- 查看操作记录(找回误删内容)
团队协作规范
-
主分支保护:main/master 分支应设置保护,禁止直接推送
-
Code Review:所有修改通过 Pull Request 合并
-
CI/CD集成:自动化测试和部署
-
文档更新:代码变更时同步更新文档
记住:Git 是一个强大的工具,掌握它能极大提高开发效率。当遇到复杂情况时,不要害怕实验(可以在测试仓库中练习),熟练后你会爱上它的强大功能!
245

被折叠的 条评论
为什么被折叠?



