跳到主要内容

Git用法总结

Git 是一个分布式版本控制系统,它可以追踪文件的变化,记录文件的历史,协助多人协作开发项目,并且可以轻松地回退到历史版本。

git 流程图.excalidraw

一、Git基础名词

  1. 本地仓库(Repository):版本库。存储项目的不同版本,用作模板、长期保存、分发。
  2. 暂存区(Staging Area):缓冲或缓存作用。
  3. 工作区:编辑区。在此编辑项目,完成一个版本后提交给版本库。
  4. 提交(Commit):将暂存区的文件保存到仓库中,形成一个新的提交记录。
  5. 分支(Branch):用于并行开发和管理不同的功能特性。
  6. 远程仓库(Remote Repository):位于网络上的仓库,用于多人协作和备份,还有内容分发。

Git 下文件生命周期图。

二、Git环境搭建

  1. 安装Git:下载网址

  2. 配置Git邮箱和用户名

    git config --global user.name "Your Name"
    git config --global user.email "youremail@example.com"

三、Git命令总结

初始化仓库

# 在当前目录创建仓库
git init

# 在指定目录创建仓库
git init /path/to/target/

# 克隆仓库到当前目录
git clone url

基本操作(提交变更)

# 查看查看仓库状态
git status [-s]

# 提交变更:工作区->暂存区
git add <file>

# 提交当前目录全部变更->暂存区
git add .

# 提交变更:暂存区->版本库
git commit -m "本次提交说明"

# 查看历史记录
git log

分支管理

备注:VSCode 中使用 Git 插件可以图形化显示分支

# 查看分支
git branch

# 创建分支
git branch <branch_name>

# 切换分支
git switch <branch_name>

# 合并分支:指定分支--合并到-->当前分支
git merge <branch_name>

# 删除分支
git branch -d <branch_name>

# 强制删除分支
git branch -D <branch_name>

远程操作

# 关联远程仓库(可关联多个)
git remote add <别名> <远程仓库url>

# 查看关联
git remote -v

# 推送:版本库->远程仓库
git push

# 拉取:版本库<-远程仓库
git pull

回退操作

格式
## 格式
git reset [--mixed] <version_id>

# --soft 版本库(id<-current)
# --mixed 暂存区<-版本库(id<-current)
# --hard 工作区<-暂存区<-版本库(id<-current)
示例
# 暂存区回退:工作区<-暂存区
git checkout -- . #撤销全部
git checkout -- example.txt #撤销单个

# 暂存区<-版本库
git reset . #撤销全部修改
git reset example.txt #撤销指定文件

# 工作区和暂存区<-版本库
git reset --hard HEAD #恢复到当前版本
git reset --hard <commit-id> #恢复到指定版本

# 撤销指定提交的修改
git revert <commit_id>

差异比较

# 工作区--暂存区
git diff

# 工作区--版本库
git diff HEAD

# 版本库--版本库
git diff <id> <id>

# 版本库--版本库
git diff HEAD~ HEAD
git diff HEAD~2 HEAD

# 指定文件
git diff <id> <id> <file>

删除文件

# 工作区
rm <file>

# 暂存区
git rm --cached <file>

# 工作区&暂存区
git rm <file>

# 查看暂存区文件
git ls-files

忽略文件

# git忽略指定文件
echo <file> >> .gitnore

# 井号用作注释。

通配符:
* 通配任意个字符
? 匹配单个字符
[] 表示匹配列表中的单个字符,比如:[abc]表示a/b/c
** 表示匹配任意的中间目录。
[0-9] 表示任意一位数字,
[a-z] 表示任意一位小写字母
! 表示取反

应该忽略哪些文件:
系统或软件自动生成的文件
编译产生的中间文件和结果文件
运行时生成日志文件、缓存文件、临时文件
涉及身份、密码、口令、秘钥等敏感信息的文件

分支进阶&冲突

什么时候发生冲突?两个分支修改了同一文件同一行代码。

# main分支 原始内容
$ echo hello.txt
2024年4月25日23:01:21

# 分支1 修改内容
$ echo hello.txt
2024年4月25日23:02:00

# main分支 修改内容
$ echo hello.txt
2024年4月25日23:02:36

# 分支1--合并-->main,冲突产生
$ git merge 分支1

查看冲突

# 查看冲突发生的文件
git status

# 查看冲突内容
git diff

cat hello.txt git在冲突文件中写入了冲突的内容和注释

<<<<<<< HEAD
2024年4月25日23:02:36
=======
2024年4月25日23:02:00
>>>>>>> 分支1

vim hello.txt 编辑冲突文件为:期望合并后的样子。

2024年4月25日23:02:36 冲突是不好滴

重新git add .和git commit -m "合并分支",冲突就消失了。

变基

git rebase 是 Git 中一个强大的命令,主要用于变基(rebase)分支历史,它的核心作用是将一个分支的提交“迁移”到另一个分支之上,使提交历史更清晰、线性。


示例1:同步主分支的最新变更

git checkout feature
git rebase main

feature 分支中的提交“重新应用”在 main 分支最新的提交后面。这比 merge 更干净,因为不会生成额外的合并提交。