Git版本控制
Git
创建仓库
方式一
1 | $ git init |
方式二
1 | $ git clone |
数据管理和文件状态
git本地数据管理分三个区域:工作区、暂存区和本地仓库
工作区:资源管理器里的文件夹
暂存区:临时区域,用于保存即将提交到git仓库的修改内容
本地仓库:用git init创建的仓库,存储代码和版本信息的主要位置
git中文件有四种状态:未跟踪、未修改、已修改、已暂存
添加和提交文件
检查当前文件状态
1 | $ git status |
添加到暂存区
1 | $ git add README |
取消添加暂存
1 | $ git rm --cached <file>... |
提交跟新
1 | $ git commit |
查看提交记录
1 | $ git log |
git reset回退版本
reset的三种模式:soft、hard、mixed
回溯之前的操作:
reflog查看之前的操作,找到版本号
reset到版本位置
1 | $ git reflog |
git diff 查看差异
git diff默认比较工作区和暂存区差异
git diff HEAD比较工作区和版本库之间的差异
git diff –cache比较暂存区和版本库之间的差异
**git diff <版本一> <版本二>**比较两个版本之间的差异
git diff <版本ID> HEAD比较版本ID和分支最新提交节点的差异
git diff HEAD~ HEAD比较上个版本和当前版本的差异(~可以替换为^)
git diff HEAD~2 HEAD比较提交之前的第二个版本和当前版本的差异
git diff HEAD~2 HEAD file3.txt比较提交之前的第二个版本和当前版本flie3.txt的差异
删除文件
1 | $ git rm <filename> |
.gitignore忽略文件
应该忽略哪些文件?
- 系统或者软件自动生成的文件
- 编译产生的中间文件和结果文件
- 运行时生成日志文件、缓存文件、临时文件
- 涉及身份、密码、口令、秘钥等敏感信息文件
忽略文件夹用/结尾,如temp/
SSH配置和克隆仓库
生成SSH key:ssh-keygen -t rsa -b 4096
克隆仓库:git clone
推送跟新内容:git push
拉取跟新内容:git pull
关联本地仓库和远程仓库
添加远程仓库
1 | $ git remote add <远程仓库别名> <远程仓库地址> |
查看远程仓库
1 | $ git remote -v |
拉取远程仓库内容
1 | $ git pull <远程仓库名> <远程分支名>:<本地分支名> |
分支简介和基本操作
查看当前仓库所有分支
1 | $ git branch |
创建分支
1 | $ git branch <分支名> |
切换分支
1 | $ git checkout <分支名> |
合并分支
1 | $ git merge <将要合并的分支> |
删除分支
1 | $ git branch -d <已合并的分支> |
终止合并
1 | $ git merge --abort |
回退和rebase
恢复删除的分支
1 | $ git checkout -b <分支名> <分支id> |
rebase改基
1 | $ git switch dev |
1 | $ git switch mian |
merge
优点:不会破坏原分支的提交历史,方便回溯和查看
缺点:会产生额外的提交节点,分支图比较复杂
rebase
优点:不会新增额外的提交记录,形成线性历史,比较直观和干净
缺点::会改变提交历史,改变了当前分支branch out的节点,避免在共享分支使用
分支管理和工作流模型
GitFlow 是一种流程模型,用于在Git上管理软件开发项目。
**主分支(master/main):**代表了项目的稳定版本,每个提交到主分支的代码都应该是经过测试和审核的。
**开发分支(develop):**用于日常开发。所有的功能分支、发布分支和修补分支都应该从开发分支派生出来。
**功能分支(feature):**用于开发单独的功能或者特性。每个功能分支都应该从开发分支派生,并在开发完成后合并回开发分支。
**发布分支(release):**用于准备项目发布。发布分支应该从开发分支派生,并在准备好发布版本后合并回主分支和开发分支。
**热修复分支(hotfix):**用于修复主分支上的紧急问题。热修复分支应该从主分支派生,并在修复完成后,合并回主分支和开发分支。