一、基础指令学习
- git clone:克隆远程仓库到本地
- git add : 将工作区的改动添加到暂存(stage/index),以便之后 commit。示例:
git add file.txt或git add .(添加所有改动) - git commit: 将暂存区的内容提交到本地仓库。示例:
git commit -m "提交说明" - git push <remote> <branch>: 将本地提交推送到远程仓库。
bash
git push <remote> <local-branch>:<remote-branch>
# 例如:
git push origin main:main
# 简写
git push origin main
# 第一次推送把本地分支main和远程分支origin/main关联起来
git push -u origin main
# 后续可以直接
git push
git pull
- git pull <remote> <branch> : 从远程获取更新并合并到当前分支
- git branch:查看本地分支列表
- git checkout 多种用法
- 切换分支:git checkout branch-name
- 创建并切换分支:git checkout -b new-branch
- 恢复文件:git checkout -- file.txt(丢弃工作区修改)
- 新版本推荐git switch <branch>:替代 git checkout切换分支
git restore <file>:替代 git checkout -- <file>恢复文件
- git merge <branch>:合并指定分支到当前分支
- git status : 查看工作区和暂存区状态(哪些文件被修改、是否已暂存等)
- git remote add <name> <url>: 添加一个新的远程仓库地址
- git remote -v:查看远程仓库信息
- git log:查看提交历史
- git diff:查看工作区与暂存区的差异
- git stash: "临时保存"功能。把当前工作区和暂存区的修改"藏起来"(stash),开发者可以干净地切换分支、拉取代码或处理紧急任务,之后再恢复这些修改继续工作。
- 适用于"代码写了一半,突然需要切分支或 pull,但又不想提交半成品" 的场景(如果不提交也不stash,直接切换分支会因为有因为有未提交的修改报错)
|----------------------------------|------------------------------------------------------------------------------------------------|
| 保存当前修改 | git stash #默认只保存已跟踪文件的修改 git stash -u # 包含未跟踪文件 # 可加上备注,方便识别 git stash save "正在开发登录页验证码功能" |
| 查看已有的 stash 列表 | git stash list |
| 恢复 stash 的修改 (不删除 stash 记录) | git stash apply # 恢复最新的 stash git stash apply stash@{1} # 恢复指定的 stash |
| 恢复 stash 的修改(恢复后立即从 stash 列表中移除) | git stash pop # 恢复最新的stash并删除它 git stash pop stash@{1} # 恢复指定 stash 并删除 |
| 删除指定的stash | git stash drop stash@{0} |
| 查看某个 stash 的具体改动 | git stash show # 查看最新stash的文件变更统计 git stash show -p # 查看完整diff |
二、查看GIt提交历史
git log 会显示完整的commit ID、作者、日期、提交说明。直接使用输出会使用分页器(q退出)、信息冗长难以浏览,可以用以下指令
bash
#快速浏览提交
git log --oneline
#查看分支合并图
git log --graph --oneline --all
#找某人提交
git log --author="姓名"
#按时间筛选
git log --since="1 week ago"
#搜索提交信息
git log --grep="关键词"
#查看文件历史
git log -p 文件名
三、git reset多版本代码切换
在实际开发中,如果需要回退到某个历史版本 进行调试、测试或撤销错误提交,就需要结合 git log查看提交历史,再用 git reset实现多版本代码切换。
git reset有三种常用模式,区别在于如何处理工作区和暂存区的更改:
|-------------|----------------------------------------------------|---------------------------|--------------|
| 模式 | 命令 | 作用 | 风险 |
| --soft | git reset --soft <commit> | 只移动 HEAD,保留工作区和暂存区 | 安全,可重新提交 |
| --mixed(默认) | git reset --mixed <commit>或 git reset <commit> | 移动 HEAD,重置暂存区,保留工作区 | 修改还在,但未暂存 |
| --hard | git reset --hard <commit> | 移动 HEAD,清空暂存区和工作区,完全回到过去 | 危险!会丢失未提交的修改 |
结合 git log实现多版本切换的步骤:
- git log --oneline #查看提交历史,复制目标 commit ID
- 使用
git reset切换到目标版本
四、基于远程Git仓库的多人协作开发流程
远程仓库通常有两个主要分支:
main(或master):生产主分支,始终保持可部署状态develop(可选):开发集成分支 ,用于集成各功能,再合并到main
4.1 标准多人协作流程(Git Flow)
整体流程:克隆仓库 → 创建功能分支 → 开发 → 提交 & Push → 发起 PR → Code Review → 合并到主分支 → 部署
-
克隆远程仓库(首次参与项目)
-
同步最新代码(每天开始工作前)git pull origin main
-
创建功能分支
-
开发与提交。开发中频繁提交,保持原子性(一个 commit 做一件事)
-
推送分支到远程
-
发起 Pull Request(PR)或 Merge Request(MR)、
-
Code Review。审查通过后,由 reviewer 或有权限者点击 "Merge"
-
合并后清理分支(删除远程功能分支,删除本地已合并的分支)
-
如果多人同时改了同一文件,合并时可能冲突,需要处理冲突(rebase变基)
1.bash# 拉取最新 main git checkout main git pull origin main # 切回功能分支,变基(推荐) git checkout feature/user-login git rebase main # 此时 Git 会暂停,标记冲突文件,我们需要: 1.打开冲突文件,手动编辑(保留正确代码,删除 <<<<<<<标记) 2.git add <冲突文件> 3.git rebase --continue 4.重复直到 rebase 完成 5.git push -f(rebase 改写了历史,需 force push) 或使用 git merge main合并,但会保留合并提交,历史较乱。
4.2 Forking 模式简介(开源协作)
如果是向 开源项目 贡献代码:
-
Fork 原仓库到自己的账号
-
git clone自己的 fork -
添加原仓库为
upstreamgit remote add upstream https://github.com/original/project.git -
开发后推到自己 fork 的仓库
-
发起 PR 到原仓库的
main
4.2指令速查
bash
git clone <url> # 克隆项目
git checkout -b feature/xxx # 创建功能分支
git add . && git commit -m "msg" # 提交代码
git push -u origin feature/xxx # 推送分支
git pull --rebase origin main # 变基同步主分支
git rebase main # 解决冲突
git push -f # force push(rebase 后)
git checkout main && git pull # 合并后同步
git branch -d feature/xxx # 删除本地分支
提交信息规范:
<type>(<scope>): <subject>
feat: 新功能
fix: 修复 bug
docs: 文档更新
style: 格式调整(不影响逻辑)
refactor: 重构
test: 测试相关
chore: 构建/工具类变动