初始化git仓库
- 创建一个仓库目录
- cd CODEBASE
- git init
- git add .
- git commit -m “MESSAGE”
git全局参数配置
git config --global user.name “”
git config --global user.email “@”
git config --global core.editor subl
克隆仓库到本地
git clone git@
本地仓库push到gitlab
git remote add NAME git@:/git_test.git
git push -u origin --all
git push -u origin –tags
常用命令
git help COMMAND
cat .gitignore 忽略应该忽略的文件
git log
git config --global alias.SHORTNAME COMMAND git命令起别名
本地仓库文件状态
git status 查看文件状态 -s缩略版
git diff 对比文件目前和暂存的区别 -staged 查看已经暂存起来的变化
git add FILE开始跟踪文件
git rm FILE 取消跟踪文件-f –cached
git mv FILE 重命名并暂存
tips:每次commit之前都先add一下,暂存最新版。如果使用git commit -a只要跟踪过的文件的最新版本就会被commit
提交
git commit --amend 补充提交
撤销
git reset HEAD NAME 可以取消暂存
git checkout -- FILE 取消修改,还原成上次提交,注意无法再次撤销
远程仓库
git remote add SHORTNAME URL
git remote rename OLDNAME NEWNAME
git remote rm REMOTENAME
git remote -v 显示所有远程仓库
git fetch REMOTENAME抓取
git push REMOTENAME BRANCHNAME
git remote show REMOTENAME 可以看到很多信息(远程仓库url、分支信息、默认push分支,pull的分支合并方式)
标签
git tag
git tag -a TAGNAME -m ‘MESSAGE’附注标签
git tag TAGNAME 轻量标签
补充打标签要提交的校验和
git log --pretty=oneline查看提交历史
git tag -a TAGNAME 部分校验和
git push REMOTENAME --tags
分支
git branch BRANCHNAME 创建分支
git branch -d BRANCHNAME
git checkout BRANCHNAME 切换分支
git log –online --decorate --graph --all 查看分支树
git merge BRANCHNAME 合并时有时要手动合并冲突文件
git fetch REMOTENAME 更新远程仓库状态 REMOTENNAME/BRANCHNAME
git pull == fetch+merge
git push REMOTENAME NATIVEBRANCHNAME:(REMOTEBRANCHNAME) 本地分支推送到远程
跟踪远程分支:
git checkout -b NATIVEBRANCHNAME REMOTENNAME/BRANCHNAME
=
git checkout --track REMOTENNAME/BRANCHNAME
git branch -vv 查看跟踪情况
git push REMOTENAME --delete REMOTEBRANCHNAME
git rebase BRANCHNAME 变基可以让历史更简洁
关键字
checkout
切换分支、查看分支历史、取消修改
Reset
可以恢复到几个提交之前,之后的提交都会被删除,会破坏提交历史
Revert
用一些新的提交去转换某几个老的提交,一般仅针对过去的一个有问题的提交
Diff
对比提交之间或与和当前工作树之间的变化
fetch
拉取远程仓库的提交
Submodule
项目子模块管理
merge
mergetool冲突解决工具
show
查询git对象
Rebase
换基,会改变提交历史,将一条分支经过整合接到另一分支上
cherry-pick
将几个提交合并到目标分支上,产生几个新的提交
stash
保存当前工作状态,并恢复到当前分支状态
Worktree
使得本地能够同时维护不同的几个版本
git存储原理
一次提交的所有文件都会用blob类型的对象来存储,并计算一个唯一的校验和
目录结构会通过树对象来存储,树对象也有自己的校验和,并且存储子成员的信息
一个提交对象也有一个自己的校验和,提交会包含文件根目录的树对象以及作者等信息,并且还包含前一次提交的校验和(父提交)。
Master是默认主分支名字,会指向最新的一次提交。
分支本质上就是一个指向提交的可变指针。
标签分为两种,一种是轻量级的,本质和分支一样,只是一个指向特点提交的指针;另一种是带附注的一个独立对象,拥有自己的校验和。
Git中存在一个HEAD指针,它指向当前工作分支的指针
Merge request
将自己工作的分支合并到其他分支的请求。
关于git的分支大致分为几类。
master,主分支,用户使用的正式版本。
Release-*,即将上线的版本分支。
Dev,开发分支,最新版本就在这里。
Feature-*,功能开发版本的分支。
Bug-*,修复线上代码bug的分支。
Code review是在feature或是bug分支提出merge request后审批人进行的一个代码审查步骤。
能直接具体看到新代码,进行审查