GIT使用学习

一、基础指令学习

  • git clone:克隆远程仓库到本地
  • git add : 将工作区的改动添加到暂存(stage/index),以便之后 commit。示例:git add file.txtgit 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实现多版本切换的步骤:

  1. git log --oneline #查看提交历史,复制目标 commit ID
  2. 使用 git reset切换到目标版本

四、基于远程Git仓库的多人协作开发流程

远程仓库通常有两个主要分支:

  • main(或 master):生产主分支,始终保持可部署状态
  • develop(可选):开发集成分支 ,用于集成各功能,再合并到 main

4.1 标准多人协作流程(Git Flow)

整体流程:克隆仓库 → 创建功能分支 → 开发 → 提交 & Push → 发起 PR → Code Review → 合并到主分支 → 部署

  1. 克隆远程仓库(首次参与项目)

  2. 同步最新代码(每天开始工作前)git pull origin main

  3. 创建功能分支

  4. 开发与提交。开发中频繁提交,保持原子性(一个 commit 做一件事)

  5. 推送分支到远程

  6. 发起 Pull Request(PR)或 Merge Request(MR)、

  7. Code Review。审查通过后,由 reviewer 或有权限者点击 "Merge"

  8. 合并后清理分支(删除远程功能分支,删除本地已合并的分支)

  9. 如果多人同时改了同一文件,合并时可能冲突,需要处理冲突(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 模式简介(开源协作)

如果是向 开源项目​ 贡献代码:

  1. Fork 原仓库到自己的账号

  2. git clone自己的 fork

  3. 添加原仓库为 upstream

    复制代码
    git remote add upstream https://github.com/original/project.git
  4. 开发后推到自己 fork 的仓库

  5. 发起 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: 构建/工具类变动

相关推荐
莫忘初心丶2 小时前
Git 忽略已加入的文件
git
im_AMBER2 小时前
Leetcode 108 交换链表中的节点
数据结构·笔记·学习·算法·leetcode·链表
这个懒人2 小时前
Git常用指令汇总
git
再卷还是菜2 小时前
网安渗透学习小结--sql注入
数据库·sql·学习
勇敢*牛牛2 小时前
在 Git 中配置 Aliases(别名)
git
LaoZhangGong1232 小时前
学习TCP/IP的第8步:紧急数据
网络·stm32·单片机·学习·tcp/ip·以太网
求真求知的糖葫芦2 小时前
微波工程4.3节散射矩阵(S参数矩阵)学习笔记(上)(自用)
笔记·学习·矩阵·射频工程
近津薪荼3 小时前
优选算法——双指针4(单调性)
c++·学习·算法
强子感冒了4 小时前
MYSQL学习笔记:DML & DQL 核心语法
笔记·学习·mysql