git常用工作流小结
git是什么
git是一个用来追踪你的文件增量更改的信息,方便未来查找你的文件变更信息,甚至回滚
Inbox
git文档
基础概念
学习git之前先要了解一下他的基础概念:
状态
- ▪ 已修改(modified)
- 如果我们一个文件,add过,就会变成已追踪的文件,如果我们修改了,没有add就会变成modified状态
- ▪ 已暂存(staged)
- 把文件
add
过
- 把文件
- ▪ 已提交(committed)
commit
过
- 有一个特殊的状态
- 未追踪(Untracked)
- why
- 有一些文件,我们虽然放在git文件夹里面,但是我们不想共享出去 就不用追踪他 (或者加入
.gitignore
文件中)
- 有一些文件,我们虽然放在git文件夹里面,但是我们不想共享出去 就不用追踪他 (或者加入
- 命令
git status
区域
- • 工作目录(working directory)
- 写代码的地方
- 所有文件都在这里,未追踪的,已追踪的等等
- • 暂存区域(Stage)
- 工作目录变更之后:
git add 文件名
,就把对应的文件放入了暂存区域 - 我们存储阶段性变更的代码的地方。存的文件类型:是我们希望把他们变成一个版本,或者版本号的文件
- Git不记录我们所有每个单词的增加和减少,而是记录我们代码的阶段性变更(完成了一个小功能)
- 工作目录变更之后:
- • Git 仓库
- 最后的状态
- 如果我们一个功能开发完了,想把他变成一个版本,就添加到git仓库里面去
git commit -m 功能完成说明
注意远程仓库实际上只是我们本地仓库的延伸,或者说一个备份,用好了本地仓库,后续再远程仓库上操作:不用协作的情况下:通过git push
和git pull
同步更新即可
工作流基本命令
git init
- 生成一个
.git
目录- 关于我们这个项目和git有关的信息都会存在对应的.git目录里面
git add .
把当前目录的所有文件从work dir
加入stage
git commit
- 每次提交都会生成一个版本hash值
- 增量式提交
- 每更新一次就往上add commit一次
- 修复式提交
- 紧急修改一个bug,但是不想新建一个大的版本,所以就使用这个
git commit --amend -m 注释
- 注意这个注释是会修改你上次提交的注释的,最好和你紧急提交到的分支是一样的
git status
工作流说明
我们要开始跟踪某个项目的时候,先使用git init
初始化项目
然后编辑完一些文件,确定好功能已经完成,就使用git add 文件名
把文件加入Stage
中,后续继续开发,然后完成一点就可以加入Stage
,等一个功能开发的差不多的时候,就可以commit
到仓库里面去,注意写好注释。
当我们的一些文件不需要提交到仓库里面的时候,就使用git reset
文件名把他从暂存区中取出来。
或者是,我们已经加入Stage
中的文件,然后继续编辑文件,文件也变成了已修改(modified)
状态,但是我们发现后续编辑的内容不是我们想要的,我们需要恢复到Stage中的状态,就使用git checkout 文件名
注意reset
和checkout
从暂存区中取出文件的区别:reset是把文件的区域改变,不影响文件本身。checkout
是改变文件的本身,不改变文件的区域。
rm --cached 文件名
:就是我们已经把一个文件加入本地仓库Repository
,但是我们后来发现这个文件不应该提交上去,所以我们需要从仓库里面删除他,但是work dir
里面不应该删除文件。注意后续要commit
本次操作,否则不会反映到页面
其他基本操作
撤销重置
-
从暂存区中撤销到工作区
- 就是我要提交一个功能,我把多余的功能也一起传上去了,比如我同时做了支付和点赞功能, 但是我这次只想commit支付功能为一个版本,但是不小心把点赞相关的文件也给add进去了,所以就要使用重置
// 从暂存区中撤销一个指定文件
git reset HEAD 文件名称
-
把暂存区全给撤回
- Add功能部分次序错了
- git reset HEAD .
-
把一个文件恢复到暂存区的状态
git checkout 文件名
-
删除
-
不追踪某个文件
-
只删除 git 仓库中的文件==不追踪某个文件 git rm --cached 文件 rm 以后,需要 commit 这次操作,否则 rm 将保留在暂存区 git commit -m 修正 复制代码
-
-
直接彻底在本地和工作区删除对应的文件
git rm 文件名
- 最后如果要反映到仓库,都必须要进行
commit
操作
-
查看日志
git log
:会显示每次commit的详细信息git log --oneline
:简洁查看git reflog
分支
用户系统、内容发布系统,一个系统包括很多功能就发布了,我们又需要在原有基础上增加一个支付功能,这个时候就要开启一个新线继续执行,如果可以的话,就直接启动即可
rebase
就是我一个大的版本更新(支付)。会有很多的细小步骤:比如:获取价格,微信支付,支付宝支付,支付密码,支付验证等等功能。我们最后commit、merge到主分支过去都会体现在分支上,但是我们又不想在主分支看到这些零碎的过程,所以我们先使用一个rebase把这些过程合并起来。把这十几个提交合并成一个提交:支付。
横向与纵向解析
- 横向就是找对应的儿子,如果想多次找下去,就要用多个
^
,不能直接一个^大于1的数字
,^n
,n大于1就是在其对应的子元素横向左到右寻找了
合并
-
基本语法
-
B 合并到 A,需要切换到 A 分支 git merge 被合并分支 查看已经合并的分支 git branch --merged 查看未合并的分支 git branch --no-merged 复制代码
-
-
冲突合并
- what
- 多个分支都对同一个文件进行了commit,然后合并分支的时候就会出现冲突
- how
- 查看冲突文件
- 修改冲突内容
- 重修,add然后提交
- what
标签
通常情况下我们会把确定的东西,一些固定稳定的版本代码打上标签
在稳定版本上开发:
- 新建多个分支来开发
- 比如一个分支来修复bug
- 一个分支来测试新功能
How good
- 分支一般用于开发,在对应commit上添加标签就说明对应的版本已经稳定,然后可以发布了
- 一般用于发布
命令总结
更具体的命令可以去看文档或者菜鸟教程(开始的inbox里面有)
init
status
add
commit
log
reflog
rm
reset
diff
branch
checkout
merge
rebase