Git 是一款分布式版本控制系统
- 分布式:每个开发者都有完整的版本库副本,可离线操作。
- 高效:能快速处理分支和合并等操作。
- 灵活:支持多种工作流程和开发模型。
- 强大的历史记录:可以方便地查看和回滚到任意版本。
gitlab
1.配置Git的name和邮箱 查看配置的Git
- git config --global user.name 'yuyss'
- git config --global user.email '2295767489@qq.com'
2.初始化仓库有2种 1.自己创建的项目需要提交到Git 2.拉公司的项目直接会初始化好
- 本地:git init
- 远程:git clone
3.和远程仓库建立连接2种方式 1.克隆公司项目的时候校验账号密码连接远程仓库 2.生成本地密钥填入
- 账号密码校验连接
- 生成本地密钥配置连接 私钥在本地 公钥配置到线上去
自己创建的新项目和远程仓库连接
- git remote add origin http......远程仓库网址
- git branch --set-upstream-to=origin/master 用于将本地分支与远程仓库中的特定分支建立跟踪关系
- git fetch
- git merge --allow-unrelated-histories 命令的作用是在合并两个没有共同祖先的分支时,允许 Git 执行合并操作。
本地分支的使用
# 创建分支
- git branch testing
- git checkout testing
# 合并
- git checkout -b testing
# 合并分支
- git merge testing
- git add
- git commit -m " "
# 查看所有的分支
- git branch
# 删除本地分支
- git branch -d testing
远程分支/github仓库
- git init 初始化本地仓库
- git remote add origin xxxx 添加远程仓库
# 远程仓库获取内容 远程仓库分支是main 本地仓库分支是 master 可能会出现不是统一分支名字导致合并的时候因为没有父分支导致的
- git fetch
- git brach --set-upstream-to=origin/main
- git merge --allow-unrelated-histories
#将git
的推送默认设置为推送到上游(upstream
)分支 在进行推送代码
- git config push.default upstream
- git push
# 换种做法直接和远程仓库分支保持一致
- git checkout main
# 推送一个远程分支
- git push origin develop
#有本地切换到本地分支 ,没有会去拉取远程分支 进行自动关联
- git checkout develop
# 删除远程分支
- git push origin -d develop
git tag
- git tag v1.0.0
- git tag
- git tag -d v1.0.0
#将本地tag push远程仓库
- git push origin v1.0.0
- git push origin --tags
#删除远程的tag
- git push origin -d v1.0.0
git flow工作流
小公司
- master: 记录主要的版本。
- develop:开发版本
- topic:新主题
更规范
master: 记录主要的版本
tag
hotfix: 热修复
merge mastero
merge develop
develop:开发分支
release:上线的分支
merge mastero
merge develop
feature:新特性
git rebase
改变某一个分支base,目的让log的历史记录更加的简洁
黄金原则:不要在主分支中使用rebase
Git中常见的命令总结
- git clone xxxxxxxx
- git add .
- git commit -m “xxxx"
- git pull ->(git fetch + git merge)
- git push
进阶的命令:
main
develop
feature
git checkout develop
1.检查服务器是否有origin/develop这个分支
2.创建一个本地的develop分支
3.让本地的develop分支自动跟踪origin/develop
4.切换到develop分支
高级命令
- git tag
- git checkout -b develop
- git push origin develop
- git merge developgit rebase
常用命令
**基本操作**
git clone url 克隆远程仓库
git init 初始化仓库,默认为 master 分支
git add . 提交全部文件修改到缓存区
git add <具体某个文件路径+全名> 提交某些文件到缓存区
git diff 查看当前代码 add后,会 add 哪些内容 变更过的内容
git diff --staged查看现在 commit 提交后,会提交哪些内容
git status 查看当前分支状态
git pull <远程仓库名> <远程分支名> 拉取远程仓库的分支与本地当前分支合并
git pull <远程仓库名> <远程分支名>:<本地分支名> 拉取远程仓库的分支与本地某个分支合并
git commit -m "<注释>" 提交代码到本地仓库,并写提交注释
git commit -v 提交时显示所有diff信息
git commit --amend [file1] [file2] 重做上一次commit,并包括指定文件的新变化
git log 查看提交历史
git log -p <file> 查看指定文件的提交历史
git blame <file> 以列表方式查看指定文件的提交历史
**提交规则**
feat: 新特性,添加功能
fix: 修改 bug
refactor: 代码重构
docs: 文档修改
style: 代码格式修改, 注意不是 css 修改
test: 测试用例修改
chore: 其他修改, 比如构建流程, 依赖管理
**分支操作**
git branch 查看本地所有分支
git branch -r 查看远程所有分支
git branch -a 查看本地和远程所有分支
git merge <分支名> 合并分支
git merge --abort 合并分支出现冲突时,取消合并,一切回到合并前的状态
git rebase <branch> 衍合指定分支到当前分支
git branch <新分支名> 基于当前分支,新建一个分支
git checkout --orphan <新分支名> 新建一个空分支(会保留之前分支的所有文件)
git branch -D <分支名> 删除本地某个分支
git push <远程库名> :<分支名> 删除远程某个分支
git branch <新分支名称> <提交ID> 从提交历史恢复某个删掉的某个分支
git branch -m <原分支名> <新分支名> 分支更名
git checkout <分支名> 切换到本地某个分支
git checkout <远程库名>/<分支名> 切换到线上某个分支
git checkout <tag> 切换标签
git checkout -b <新分支名> 把基于当前分支新建分支,并切换为这个分支
git tag 列出所以tag
git tag <tagname> 基于最新提交创建标签
git tag -d <tagname> 删除标签
**远程操作**
git fetch [remote] 下载远程仓库的所有变动
git remote -v 显示所有远程仓库
git remote show <remote> 查看指定远程版本库信息
git remote add <remote> <url> 添加远程版本库
git pull [remote] [branch] 拉取远程仓库的分支与本地当前分支合并
git fetch 获取线上最新版信息记录,不合并
git push [remote] [branch] 上传本地指定分支到远程仓库
git push [remote] --force 强行推送当前分支到远程仓库,即使有冲突
git push [remote] --all 推送所有分支到远程仓库
**撤销操作**
git checkout [file] 恢复暂存区的指定文件到工作区
git checkout [commit] [file] 恢复某个commit的指定文件到暂存区和工作区
git checkout . 恢复暂存区的所有文件到工作区
git reset [commit] 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
git reset --hard 重置暂存区与工作区,与上一次commit保持一致
git reset --hard HEAD 撤销工作目录中所以未提交文件的修改内容 和上面指令作用区别基本没有
git reset [file] 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
git revert [commit] 撤销指定的提交
reset:真实硬性回滚,目标版本后面的提交记录全部丢失了
revert:同样回滚,这个回滚操作相当于一个提价,目标版本后面的提交记录也全部都有
**存储操作**
git stash 暂时将未提交的变化移除
git stash pop 取出储藏中最后存入的工作状态进行恢复,会删除储藏
git stash list 查看所有储藏中的工作
git stash apply <储藏的名称> 取出储藏中对应的工作状态进行恢复,不会删除储藏
git stash clear 清空所有储藏中的工作
git stash drop <储藏的名称> 删除对应的某个储藏
**不常用指令**
git mv <old> <new> 文件改名
git rm <file> 删除文件
git rm --cached <file> 停止跟踪文件但不删除