Git用法总结
Git 是一个分布式版本控制系统,它可以追踪文件的变化,记录文件的历史,协助多人协作开发项目,并且可以轻松地回退到历史版本。
一、Git基础名词
- 本地仓库(Repository):版本库。存储项目的不同版本,用作模板、长期保存、分发。
- 暂存区(Staging Area):缓冲或缓存作用。
- 工作区:编辑区。在此编辑项目,完成一个版本后提交给版本库。
- 提交(Commit ):将暂存区的文件保存到仓库中,形成一个新的提交记录。
- 分支(Branch):用于并行开发和管理不同的功能特性。
- 远程仓库(Remote Repository):位于网络上的仓库,用于多人协作和备份,还有内容分发。

二、Git环境搭建
-
安装Git:下载网址
-
配置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
更干净,因为不会生成额外的合并提交。