当前位置: 首页 > news >正文

GIT基础命令和分支管理

文章目录

    • 核心概念
      • 版本标识符
    • 工作区、版本库与暂存区
      • 工作流程
    • 基础命令与版本管理
      • 仓库管理
      • 基本命令
      • 文件操作
      • 提交管理与版本回退
      • 版本回退与状态重置
      • 撤销操作与回滚场景
  • 回滚策略对比
    • 分支管理
      • 删除远程分支
      • 分支命名规范
      • 分支与环境对应关系
      • 分支合并(merge)
    • 提交与忽略规范
      • 提交信息规范
      • GitIgnore配置
    • 参考链接

核心概念

Git是分布式版本控制系统。

  • 分布式架构:每个开发者都有完整的代码历史
  • 快照机制:Git以快照方式记录文件状态
  • 分支轻量化:创建分支快速轻量
  • 数据完整性:通过SHA-1校验和确保数据完整性

版本标识符

  • HEAD^:上一个版本
  • HEAD^^:上上一个版本
  • HEAD~100:往上100个版本

工作区、版本库与暂存区

  • 工作区:可直接编辑的项目目录
  • 版本库.git隐藏文件夹,包含所有历史记录
  • 暂存区.git/index,用于存放准备提交的修改

工作流程

  1. 修改文件(工作区)
  2. git add 添加到暂存区
  3. git commit 提交到版本库

基础命令与版本管理

仓库管理

# 克隆远程仓库
git clone git@example.com:username/mytest.git
# 进入项目目录
cd mytest
# 创建README文件
touch README.md
# 添加文件到暂存区
git add README.md
# 提交并添加说明
git commit -m "add README"
# 推送到远程master分支
git push -u origin master
# 初始化已有文件夹为Git仓库
cd existing_folder
git init
git remote add origin git@example.com:username/mytest.git
git add .
git commit
git push -u origin master
# 推荐:使用ghproxy.net镜像加速
git clone https://ghproxy.net/https://github.com/apache/incubator-devlake.git
# 直接访问GitHub
git clone https://github.com/apache/incubator-devlake.git
# 使用SSH克隆
git clone git@github.com:apache/incubator-devlake.git

基本命令

# 查看远程仓库详细信息
git remote show origin
# 以指定作者信息进行提交
git commit -m "ai commit" --author="ai <example@example.com>"
# 列出所有分支
git branch -a
# 切换到指定分支
git checkout 分支名
# 查看所有配置
git config --list
# 查看用户配置
git config --global --list
# 查看镜像相关配置
git config --global --list | grep url
# 查看特定配置项
git config --global user.name
git config --global user.email

文件操作

# 比较工作区文件与版本库中最新版本的差异
git diff 文件名
# 从指定提交记录中恢复单个文件到暂存区
git reset <commit hash> 文件名
# 丢弃工作区中对文件的所有修改
git checkout -- 文件名
# 从Git仓库和本地文件系统中删除所有匹配的文件
git rm *
# 仅从暂存区删除文件,保留工作区文件
git rm --cached <文件名>

提交管理与版本回退

# 推送所有标签
git push origin --tags
# 推送指定标签
git push origin v0.1.2

版本回退与状态重置

# 彻底回退到上一个版本,丢弃所有本地修改(危险,重写历史,仅限本地分支)
git reset --hard HEAD^
# 如已推送,需强制覆盖远程(高危,慎用!)
git push -f origin master
# 查看所有分支的 HEAD 和 commit 移动历史(reset后悔药)
git reflog

撤销操作与回滚场景

# 场景1:丢弃工作区某个文件的所有本地修改
git checkout -- file# 场景2:文件已加入暂存区,想撤销暂存区的修改,再丢弃工作区修改
git reset HEAD file   # 先撤销暂存区
git checkout -- file  # 再丢弃工作区# 场景3:已提交不合适的修改,想回退提交(未推送远程)
git reset --hard HEAD^
# 如已推送,需强制覆盖远程(高危)
git push -f origin 分支名# 留记录(安全,推荐用于公共分支)
git revert HEAD
git push origin 分支名

回滚策略对比

用法影响历史是否产生新commit协作安全性推荐场景
git reset --hard重写/删除危险本地私有分支
git revert追加/保留安全任何公共/协作分支

公共分支用revert,本地分支可用reset。reset慎用,revert安全。

分支管理

删除远程分支

# 删除远程分支
git push origin --delete feature_sortindex
# 推送本地分支到远程
git push origin feature_sort
# 同步远程分支状态,清理本地已删除的远程分支引用
git fetch -p origin
# 删除本地的远程跟踪分支引用
git branch -r -d origin/dev

分支命名规范

  • master:主分支,生产环境,禁止直接修改
  • develop:开发分支,最新开发代码
  • feature/xxx:新功能分支,基于develop
  • test:测试分支,功能测试
  • release:预上线分支,UAT测试
  • hotfix/xxx:紧急修复分支,基于master

分支与环境对应关系

分支功能环境可访问
master主分支PRO
develop开发分支DEV
feature新特性开发-
test功能测试FAT
release预上线UAT
hotfix紧急修复-

分支合并(merge)

# 标准合并(可能会快进,历史不保留分支信息)
git merge feature_branch# --no-ff合并(强制生成一次合并commit,保留分支历史,推荐用于主分支合并)
git merge --no-ff feature_branch# 合并时添加说明(推荐)
git merge --no-ff feature_branch -m "合并feature_branch,保留分支历史"

标准合并(默认ff)会在分支无分叉时直接快进,历史不留合并记录。–no-ff会生成一次合并commit,便于追溯分支开发历史,适合主分支、release、hotfix等重要分支合并。

提交与忽略规范

提交信息规范

  • commit message建议采用type(scope): subject格式
  • type常用:feat、fix、docs、style、refactor、perf、test、chore、delete、modify、build、ci、revert
# 修正提交信息
git commit --amend -m "新的提交信息"
# 撤销最近的提交并重做(危险,慎用)
git reset --soft HEAD^ # 或 --mixed, --hard

GitIgnore配置

.gitignore用于指定忽略提交的文件列表。

HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
.idea
*.iml
*.ipr
.vscode/
*.log
/logs*
*.jar
*.war
*.zip
*.tar.gz
*.cmd

参考链接

  • 分支管理
  • Git官方文档
  • Git用户手册
  • Git Best Practices
  • Pro Git Book
http://www.lryc.cn/news/578962.html

相关文章:

  • Linux环境下使用 C++ 与 OpenCV 实现 ONNX 分类模型推理
  • ESP32与树莓派C++、Rust开发实战
  • 在米联客4EV上部署tinyriscv
  • 高速公路闲置土地资源化利用:广西浦北互通3MW分布式光伏监控实践
  • 基于大模型的急性重症胰腺炎全流程预测与诊疗方案研究
  • 从暴力穷举到智能导航,PC本地搜索被腾讯电脑管家“拯救”
  • 云原生环境下部署大语言模型服务:以 DeepSeek 为例的实战教程
  • Linux操作系统之文件(一):重识IO
  • 解决Linux下根目录磁盘空间不足的问题
  • 基于Cox风险比例模型的会员用户流失预测研究
  • [云上玩转Qwen3系列之四]PAI-LangStudio x AI搜索开放平台 x ElasticSearch: 构建AI Search RAG全栈应用
  • CLIP heat map generation
  • vue中的toRef
  • SpringBoot控制反转
  • 无人机AI制导模块运行方式概述
  • Docker Desktop导致存储空间不足时的解决方案
  • 阿里巴巴Java开发手册(1.3.0)
  • Python数据解析与图片下载工具:从JSON到本地文件的自动化流程
  • 买卖股票的最佳时机--js 算法
  • Nginx、Spring Cloud Gateway 与 Higress 的应用场景及核心区别
  • 从0到1:我的飞算JavaAI实战之旅,效率飙升10倍不是梦!
  • 【Rancher Server + Kubernets】- Nginx-ingress日志持久化至宿主机
  • uniapp项目中node_modules\sass\sass.dart.js的体积过大怎么处理
  • LeetCode[617]合并二叉树
  • 音频调试经验总结
  • 单链表和双向链表
  • Knife4j+Axios+Redis:前后端分离架构下的 API 管理与会话方案
  • 将文件使用base64存入数据库并在微信小程序中实现文件下载
  • 修复手机液晶面板显性横向线性不良定位及相关液晶线路激光修复原理
  • 【安全工具】SQLMap 使用详解:从基础到高级技巧