基本概念
版本库.git文件
当我们使用git管理文件时,一般它会多出一个.git
文件,我们将称为版本库
工作区
本地项目存放文件的位置
暂存区
顾名思义就是暂时存放文件的地方,是通过git add
命令将工作区的文件添加到缓冲区。
本地仓库
通常情况下,我们使用git commit
命令可以将暂存区
的文件添加到本地仓库
远程仓库
举个例子,当我们使用GItHub托管我们项目时,它就是一个远程仓库。
git文件状态
通过git status
- untracked : 在暂存区没有该文件
- modified : 修改改文件
- staged 使用 git add 暂存
分支管理规范
master分支
主分支,用于部署生产环境的分支,确保稳定性。
master分支一般由develop
以及hotfix
分支合并,任何情况下不能直接修改
develop分支
develop为开发分支,通常情况下,保存最新完成以及bug修复后的代码
开发新功能时,feature分支
都是基于develop分支
下创建的
feature分支
开发新功能,基于上以develop
为基础创建feature分支
分支命令 : feature/开头的为特性分支,命令规则: feature/user_module 、 feature/cart_module
release分支
release为预上线分支,发布提测阶段,会release分支代码为基准提测。
比如develop
完善后准备上线,就release
合并develop
,检车下是否有问题,没问题就提测。【这个步骤可略过】
hotfix分支
线上出现紧急问题时,需要及时修复,以master分支
为基线,创建hotfix分支
,修复完成后,需要合并到master分支
和develop分支
。
分支命名:hotfix/开头的为修复分支,他的命名规则与feature分支类似。
小规模流程分支
- 简单一点的话,其实可以只需要
master
、dev
、hotfix
就即可。 master
作为线上,dev
作为开发并且测试环境,hotfix
是修改bug/或者开发新功能。- hotfix完成了提交到
dev
,dev
测试环境没问题,再把hotfix
提交到master
线上去。 - 新bug或者新需求,再从
master
中检出分支。
常用命令
- 初始化新仓库
git init
- 克隆代码
git clone
- 克隆指定分支
git clone -b dev
- 查看状态
git status
- 提交单个文件
git add index.php
- 提交所有文件
git add -A
- 使用通配符提交
git add *.js
- 提交到仓库中
git commit -m '提示信息'
- 提交已经跟踪过的文件,不需要执行add
git commit -a -m '提交信息'
- 删除版本库与项目目录中的文件
git rm index.php
- 只删除版本库中文件但保存项目目录中文件
git rm --cached index.php
- 修改最后一次提交
git commit --amend
创建版本库
git clone //克隆远程仓库
git init //初始化本地版本库
git fetch //刷新远程分支(当远程创建,本地还没检索到使用)
配置命令
git config --list //列出当前配置
git config --local --list //列出Repository配置
git config --global --list //列出全局配置
git config --system --list //列出系统配置
/**配置用户信息**/
//全局加global ,项目中配置去掉global
git config --global user.email "邮箱" //配置用户邮箱
git config --global user.namel "名字" //配置用户名
alias别名操作
git config --global alias.a add //表示取a别名代表add 操作
git config --global alias.s status //表示取s别名代表status 操作
或者去.gitconfig
文件中配置alias取别名
工作区操作
git checkout -- [文件/目录所有内容] //撤销工作区的内容
暂存区操作
git rm --cached xxx.php //暂存区撤销到工作区(针对第一次入暂存区撤回)
git reset HEAD xx.php //暂存区撤销到工作区 (针对已提交过commit,第二次后进入暂存区操作)
仓库管理操作
git commit -m '提交' //提交仓库
git commit --amend //提交到当前commit日志
git pull //拉取远程库的内容[默认是推送当前分支同名]
git pull origin lmq //拉取远程库的lmq分支内容
git pull origin lmq:lmq //拉取最新远程lmq分支到本地lmq分支
git push //推送内容到远程 [默认是推送当前分支同名]
git push -f //强制推送(针对合并的时候)
git push origin lmq //推送内容到远程库的lmq分支
git push --set-upstream origin lmq //本地lmq分支关联远程分支并推送
git remote add origin [仓库地址] //添加远程仓库地址(本地关联远程)
git remote -v //查看远程库
git mremote rm origin //删除远程
缓存(存储)区管理
git statsh //当前代码缓存起来
git statsh list //获取所有缓存标识
git stash apply //恢复缓存区内容(缓存区标识存在)
git stash drop stash@{0} //删除缓存区某个标识(0-代表第一个)
git stash pop (恢复缓存区内容并且删除缓存区)
分支管理
git branch //查看本地分支
git branch -r //查看远程分支
git branch -a //查看本地和远程分支
git checkout <branch-name> //从当前分支,切换到其他分支
git checkout -b <branch-name> //创建并切换新建分支
git branch -d <branch-name> //删除本地分支(本地)
git branch -D <branch-name> //强制删除分支(提交记录并没合并过 -d是删除不了 )
git merge <branch-name> //当前分支与指定分支合并
git merge --abort //合并冲突时(merging),取消git合并分支
git branch --merged //查看哪些分支已经合并到当前分支
git branch --no-merged //查看哪些分支没有合并到当前分支
git branch -v //查看各个分支最后一个提交对象信息
git push origin --delete <branch> //删除远程分支
git branch -m <old-name> <new-name> //重命名分支
git checkout -b 本地分支 origin/远程分支 //拉取远程分支并创建本地分支
git rebase <branch-name> //衍合指定分支记录到当前分支(不产生分支合并-推荐用)
git rebase --abort //衍合冲突(rebase)的时候,取消衍合
查看历史记录
git log //查看提交的日志
git log -1 //查看最近一次提交
git log -p //查看每一次的变动信息
git log --oneline //查看日志(简短展示)
git log --oneline -p //查看文件变动信息(简短展示)
git log --name-only //查看哪些文件发生了变化?
git log --name-status //查看文件哪些内容弄变化?(add/save)
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue)<%an>%Creset' --abbrev-commit //美化后
版本回滚
- --mixed: 暂存区清空,工作区保留 (不删除工作空间改动代码,撤销commit ,并撤销git add 操作)
- --soft: 暂存区保留,工作区保留 (不删除工作空间改动代码,撤销commit,不撤销git add)
- --hard : 暂存区清空,工作区清空 (删除工作空间改动代码,撤销commit ,撤销git add)
//--hard : 回退全部,--mixed:回退部分,包含HEAD ,index, --soft:只回退HEAD
git reset --(soft|mixed|hard) <HEAD ~(num)> | commit ID
git reset --hard HEAD^ 回退到上个版本
git reset HEAD~1 //撤销前一次的操作
git reset --hard HEAD~3 //回退到前3次提交之前,以此类推,回退到n次提交之前
git reset --hard commitId //退到/进到,指定commit ,使用这个,需要强推远程 git push origin HEAD --force
git revert HEAD // 撤销前一次 commit
git revert HEAD^ //撤销前前一次 commit
git revert commitId //撤销指定的版本,撤销也会作为一次提交进行保存
git reflog //查看你每一次对仓库的操作
revert与reset不同 revert不会舍弃原来的提交记录,而是生成了一次新的提交。
reset是撤回到某个指定的版本,而revert则是将某个指定的版本撤销,也就是撤回到指定版本之前的一个版本上。
标签管理
git tag //列出本地所有标签
git tag <tag-name> //基于最新提交创建标签
git tag -d <tag-name> //删除标签
其他命令
//生成zip压缩包
git archive master --prefix='lmq' --forma=zip > lmq.zip //压缩master分支的内容
牛逼牛逼