git 常用命令
git fetch
将提交、文件和引用从远程存储库下载到本地存储库中。更新远程仓库的本地镜像。
fetch + merge = pull
git add
git add .
监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。git add -u
仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)git add -A
是上面两个功能的合集(git add --all的缩写),将新增、删除、修改的文件改动全保存至缓存区
git commit
将代码从缓存区保存至本地仓库
git commit 使用 -m 选项以在命令行中提供提交注释。
git commit -m "first commit"
git clone
将远程仓库clone到本地仓库 + 工作区
git push
将本地仓库的代码更新到远程仓库。
直接更新到远程仓库
git push <远程主机名> <本地分支名>:<远程分支名>
一般远程仓库和本地镜像的分支存在追踪关系(git remote),可直接更新到本地镜像:
git push origin <branch>
git checkout
切换分支
git checkout (branchname)
切换到分支时,如果分支不存在,使用-b选项可以新建
git checkout -b (branchname)
将目录下所有文件restore到 最近一次commit 或者指定commit
git checkout [commit Id] <目录>
git stash
将add但是还没有commit的文件移动到stash区,注意是移动不是复制。新增的文件,直接执行stash是不会被存储的,需要先add
git rebase
合并多次提交,简化分支合并记录线
git rebase --continue
git rebase --abort
git rebase -i [startpoint] [endpoint]
其中-i的意思是--interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit。该区间指定的是一个前开后闭的区间
交互式编辑界面,指令类型
pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)
git revert
与git reset类似,用于代码回退。但是会增加一个新的commit id而不是删除当前的commit id,例如:
git log --graph
: 1->2->3
git reset
: 1->2
git revert
: 1->2->3->2
git merge
git merge --abort
当merge发生冲突时,merge --abort 将会放弃merge并恢复merge前的状态。注意:如果有未commit的改变, merge --abort可能无法恢复,因此建议在merge前一定先commit所有的change
git cherry-pick <commit id>
将指定的commit反合于其他分支。
git branch
创建和管理分支
创建分支命令:
git branch (branchname)
删除分支命令:
git branch -d (branchname)
git init
在当前存储库上初始化 Git
git log
查看历史提交记录
git remote
添加远程版本库命令
git remote add [shortname] [url]
git diff
显示当前分支与其它分支之间差异
git代码区域
工作区间: 即我们创建的工程文件, 在编辑器可直观显示;
缓存区: 只能通过git GUI或git shell 窗口显示,提交代码、解决冲突的中转站;
本地仓库: 只能在git shell 窗口显示,连接本地代码跟远程代码的枢纽,不能联网时本地代码可先提交至该处;
远程仓库: 即保存我们代码的服务器
工作暂存区(stash)
代码回退
head^
head^数字
Angular 提交规范
<type>(<scope>): <subject>
//
<body>
//
<footer>
type
docs:对文档进行了修改
feat:增加新的特征
fix:修复bug
refactor:既不是修复bug也不是添加特征的代码重构
style:不影响代码含义的修改,比如空格、格式化、缺失的分号等
test:增加确实的测试或者矫正已存在的测试
chore:构建过程或辅助工具的变动
pref:提高性能的代码更改
build:对构建系统或者外部依赖项进行了修改
ci:对CI配置文件或脚本进行了修改
Git Flow
Master分支
主干,常驻。该分支是最近发布到生产环境的代码。该分支只能从其他分支合并,不能在这个分支直接修改。
Develop 分支
开发分支,常驻。该分支是我们是我们的主开发分支,包含开发中的最新代码。这个主要合并与其他分支,比如Feature分支,不能在直接在该分支上开发。
Feature 分支
特性分支,临时。一个新功能会基于Develop分支创建一个Feature分支,开发完成后,会将Feature分支合并到Develop分支。分支名建议为feature/<特性描述xxx>
Release分支
发布分支,临时。版本发布阶段用于预发布的分支。基于Develop分支创建一个Release分支并提交测试,测试中遇到的问题在Release分支上修改;版本发布后,将Release分支合并到Master和Develop分支。分支名建议为release/<版本号vxxxx-xxx>
Hotfix分支
补丁分支,临时。当在Master分支发现新的Bug时,需要创建一个Hotfix分支, 问题修复后,将Hotfix分支合并回Master和Develop分支,所以Hotfix的改动会进入下一个Release。分支名建议为hotfix/<故障描述xxx>
相关指令实例
创建develop分支
git branch develop
将分支推到远程仓库
git push -u origin develop
通过develop新建feaeure分支
git checkout -b feature develop
切换到develop分支
git checkout develop
将feature合并到当前分支
git merge --no-ff feature
--no-ff:保留分支的commit历史,所有的 commit 都会加到 master 分支上,并且会生成一个merge commit
--squash:使用squash方式合并,把多次分支commit历史压缩为一次删除本地分支
git branch -d <some-feature>
删除远程feature分支:
git push origin --delete feature
给master分支打标签
git tag -a v0.1.0 master
提交标签到远程仓库
git push --tags