Git项目管理
- 分区概念:
- 创建本地仓库
- 查看当前仓库的状态
- 工作区添加到暂存区
- 暂存区恢复到工作区
- 工作区提交到本地仓库
- 查看提交日志
- 版本回滚
- 查看版本变更的所有记录
- 分支
- 冲突解决
- HEAD指针
- 分支使用的一般规范
- 远程仓库
- .gitignore
- references:
分区概念:
创建了本地仓库以后,有三个区:
- 工作区(workspace)
- 暂存区(index)
- 本地仓库(repository)
我们新创建的文件,叫做untracked,
我们修改了已有的文件,叫做unstaged,
他们都在工作区里
创建本地仓库
git init
在当前目录中执行git init,你的这个文件夹里就会多出一个.git文件夹,并成为一个本地仓库
查看当前仓库的状态
git status
如果你在一个不是本地仓库的目录里执行这条指令,会报错:
F:\Program Files\Obsidian\Notes>git status
fatal: not a git repository (or any of the parent directories): .git
如果你在一个本地仓库里执行这条指令,那就会显示:
- 当前仓库的工作区中所有unstaged和untracked
- 当前仓库的暂存区中所有uncommitted
工作区添加到暂存区
git add
将上述的工作区中的文件,经过add进入到暂存区index,这时候就准备好commit了
git add 后面可以跟文件名,也可以跟目录名
git add filename.subfix
git add . //将当前目录下所有文件都放到暂存区了
暂存区恢复到工作区
git restore
git restore --staged filename.subfix
unstage,将一个文件从暂存区里取出来
工作区提交到本地仓库
git commit
git commit -m "描述"
暂存区的内容,经过commit以后到达本地仓库的当前分支成为一个版本
一次commit,产生一个版本
commit不能提交单个文件,一提交就是将整个暂存区里的东西全部提交了
查看提交日志
log
查看commit记录,对于每一个记录,可以查看其:
- 提交标识号:每次提交都会有一个极长的字符串作为其标识号
- Author:提交者
- Date:提交日期
- 提交描述:每次commit都必须附带一个对本次提交的decription
options:
--all 显示所有分支
--pretty-oneline 将提交信息显示为一行
--abbrev-commit 使得输出的commitID更简短
--graph 以图的形式显示
当前还没有过任何提交记录
版本回滚
git reset
git reset --hard ID
版本回滚
如果你回滚到以前的某个版本,那么它之后的版本,你再通过git log去查的话就没有了
查看版本变更的所有记录
git reflog
记录了所有的版本变化的记录
git里面只要你提交过就丢不了
分支
每个人的开发互不影响,或者支线与主线互不影响
查看分支
git branch
创建分支
git branch branch_name
创建这个分支是根据当前分支的当前状态来拷贝一个副本
删除分支
git branch -d branch_name
git branch -D branch_name # 强制删除
切换分支
git checkout branch_name
切换这个分支以后,你的所有commit都会作用于当前分支,对另一个分支毫无影响
git checkout -b branch_name
创建并切换
合并分支
git merge branch_name
将branch_name合并到当前分支
冲突解决
当两个分支,他们对同一个文件的同一行有不同修改时,就会confict
这时git会让你来决定这一行的内容到底是什么
HEAD指针
头指针,指向当前的分支
分支使用的一般规范
master
线上分支,发行分支,一般不直接对这个分支进行任何修改
develop
开发分支
feature
每当项目要添加一个新功能时,就从develop创建一个新分支feature_x,然后对这个分支开发,开发好了以后merge到develop
当一个功能开发完了以后,这个功能对应的分支就可以删除了
hotfix
当线上项目发生bug时,就从master创建一个hotfix分支,修改bug,修改好了以后再merge回master,同时也要merge到develop上面
其他常见的分支还有pre,test等
其余分支不同公司有不同要求,不同团队有不同规范
远程仓库
创建SSH公钥(public key)
Gitee和Github上都会让我们给账户设置一个SSH公钥
ssh keygen -t rsa
克隆远程仓库到本地
git clone 远程项目地址 [项目在本地的别名]
添加远程仓库
首先要把远程仓库和本地仓库建立一个对应关系
git romote add 远程仓库别名 远程仓库地址(SSH或HTTPS)
git remote add origin git@github.com:ztsrxh/RoadBEV.git
99%情况下,一个本地仓库对应一个远程仓库,极少数情况下,一个本地仓库会对应到多个远程仓库
查看远程仓库
查看本地仓库所对应到的所有远程仓库
git remote
之前你git remote add 过的所有远程仓库都会被显示
推送到远程仓库
git push [-f] [--set-upstream] [远程仓库别名] [本地分支名] [:远端分支名]
git push origin master
push其实是个merge操作,就是把本地的分支merge到远端分支,那么同样可能产生conflict
--options:
-f:
如果产生conflict,无脑强制用本地覆盖远端
一般公司里会把-f禁用,以免小白把仓库里的代码全覆盖了
--set-upstream:
推送到远端的同时还建立与远端分支的联系,一次执行,永远绑定
git push --set-upstream origin master: master
远端分支名如果跟本地分支一样,那么就可以省略本地分支
查看本地分支和远程分支的对应关系
git branch -vv
抓取
抓取就是将仓库里的更新都抓取到本地,不会进行合并
如果不指定远端名称和分支名,那就抓取全部分支
git fetch [remote name] [branch name]
git merge origin/master
拉取
拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge
如果不指定远端名称和分支名,则抓取更新所有分支
git pull
.gitignore
当前项目下有一些文件我们希望git忽视掉,
创建一个叫.gitignore的文件,里面保存你希望忽视的文件格式:
*.a
.gitignore文件一般是项目组统一给一个,不需要自己写
references:
教程视频
Git官方文档
https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control