GIT基础命令和分支管理
文章目录
- 核心概念
- 版本标识符
- 工作区、版本库与暂存区
- 工作流程
- 基础命令与版本管理
- 仓库管理
- 基本命令
- 文件操作
- 提交管理与版本回退
- 版本回退与状态重置
- 撤销操作与回滚场景
- 回滚策略对比
- 分支管理
- 删除远程分支
- 分支命名规范
- 分支与环境对应关系
- 分支合并(merge)
- 提交与忽略规范
- 提交信息规范
- GitIgnore配置
- 参考链接
核心概念
Git是分布式版本控制系统。
- 分布式架构:每个开发者都有完整的代码历史
- 快照机制:Git以快照方式记录文件状态
- 分支轻量化:创建分支快速轻量
- 数据完整性:通过SHA-1校验和确保数据完整性
版本标识符
HEAD^
:上一个版本HEAD^^
:上上一个版本HEAD~100
:往上100个版本
工作区、版本库与暂存区
- 工作区:可直接编辑的项目目录
- 版本库:
.git
隐藏文件夹,包含所有历史记录 - 暂存区:
.git/index
,用于存放准备提交的修改
工作流程
- 修改文件(工作区)
git add
添加到暂存区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
:新功能分支,基于developtest
:测试分支,功能测试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