此文作为在工作工使用git的一篇笔记防止遗忘。长期更新,如果有错误,请指正,不胜感激。
工欲善其事必先利其器,我同时使用的git命令行和GUI的方式使用git,原因是:命令行在多分支查看与多文件提交时,比对效率不如gui工具高;但是GUI的功能上不如命令行强大,某些操作速度上不如命令行快。
我处理命令行git外,用的GUI工具主要有两个,一个是jetbrains家族软件的idea自带的git插件,一个是GitKraken(界面比较华丽,专业版收费,个人使用免费版本就行)
系列文章:
1、《git入门教程》http://www.jianshu.com/p/d22d1a517f93
安装好git后的的第一步(如果不设置后面不允许提交):
git config --global user.email "bsqql123@163.com"
git config --global user.name "ice blue"
1、基础命令
由于是基础命令,就不进行介绍了,很多文章都介绍的比较详细。
git config --list 查看当前的配置
git add .
git commit -m "init" # init 为你的提交信息,可以任意填写,但是团队开发时建议制定规范,并按规范填写。
2 、快捷命令
对于已经加入缓存区中的文件,可以使用git commit -am ""# 省去了git add .这一步操作。
从缓存区移除 ,文件。
git rm --cache <file>
展示所有被追踪的文件
git ls-files -t
git push origin
上面命令表示,将当前分支推送到origin主机的对应分支。如果当前分支只有一个追踪分支,那么主机名都可以省略。如下:
git push
git branch --set-upstream my_branch origin/my_branch 这条命名设置远程追踪。
常用的alias:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all"
git config --global alias.co checkout
git config --global alias.st status
git rebase -i
git checkout -b name-of-new-branch 169d2dc
查看全局的配置(包括alias):
git config --global --list
3、分支管理
分支管理是git比较有特色的地方。
下面介绍一些常用的git 分支操作命令。
1)创建分支
git branch mystudygit1.0
创建分支并且切换到分支
git branch -b mystudygit1.0
创建指定版本的分支,并且切换到此分支(-b表示切换的意思)
git checkout -b name-of-new-branch 169d2dc
git checkout -- file 表示将已经加入 缓存区的文件的改动删除,用的比较少,具体参考如下链接:
http://www.cnblogs.com/Calvino/p/5930656.html
-
切换分支
git checkout mystudygit1.0 -
删除分支
git branch -d mystudygit1.0 //如果该分支没有合并到主分支会报错
或者
git branch -D mystudygit1.0 //强制删除
删除本地远程分支
git branch -r -d origin/branch-name
删除服务器远程分支
1、
git push origin :<branch-name>
或
2 、
git push origin --delete <branchName>
3、git 推送本地分支test
到远程feature_add_querymodel
git push origin test:feature_add_querymodel
4、重命名分支
git branch -m devel develop
git cherry <sha1> 命令
如果发生了冲突,需要手工解决冲突,
然后使用 git cherry-pick --continue 告知 git 已经解决完冲突或者
使用 git cherry-pick --abort 取消,並且回到 cherry-pick 前的状态
要选择多个提交,可以给git cherry-pick命令传递-n选项,比如:
git cherry-pick –n 321d76f
git cherry-pick –n c87fc86
此时所有的321d76f 版本会应用到当前的暂存区和工作目录但是不会提交,head指针不会发生移动。改变
这样在拣选了这个改动之后,进行暂存而不立即提交,接着可以进行下一个拣选操作,一旦拣选完需要的各个提交,就可以使用git commit命令 一并提交。
idea 自带git插件rebase,rebase操作:
image.png点击右下角的git:xxx 即可出来弹窗。
image.png如果出现冲突的换会出现类似弹窗。
image.png双击文件名称即可进行手工解决冲突,idea非常人性化的对比文件
image.png点击图中箭头即可accept代码。
中间为合并的版本,最右边为远程版本,图中也显示了出来。具体可以操作一下试试。
apply all non-confliction changes 这个功能也是十分的好用。
当然可以手工操作,不过觉得界面操作更为快捷,解决冲突更易。
参考文档:https://git-scm.com/docs/git-cherry-pick
4、git规范
rebase准则:
“No one shall rebase a shared branch” — Everyone about rebase
mingl
翻译一下就是:
不要在公共分支上rebase,因为会使分支变得混乱。
5、开发流程
在工作中,用git管理项目需要走一下流程。
1、Release分支: 稳定分支,由master leader 负责merge。用于生产环境的部署。
2、Master分支: 开发分支。定期 merge 到 release 分支。
3、Pre分支:预生产分支,测试通过后,可以申请merge到master分支。Pre 分支用于 Preview 环境的部署。
4、Feature 分支:开发分支。开发完后 cherry-pick 到 staging 分支进行测试,测试通过后 cherry-pick 到 Pre 分支进行 Preview 环境的测试。feature 分支名以 feature_ 开头,后面跟简短的英文说明。比如,某次修改为了添加测试,可将分支名命名为 feature_add_unit_tests 。
git config --global user.email "bsqql123@163.com"
git config --global user.name "ice blue"
git reflog 可以查看历史操作命令,非常好用。
image.pnggit reset --soft sha-id 即可返回到指定操作前。
pull request 的操作步骤,首先完成提交后,一定要记得rebase 公共分支代码,
比如我在
dev分支checkout的feature分支,commit后,pull request前记得rebase dev分支的代码。
当 pull request后,别人审核你的代码不通过,这时你要重新修改,可以使用
git add <file> #一定要先把文件放到暂存区
然后使用
git commit --amend
这个命令,只能修改最后一次提交,如果想修改前几次的提交,请使用reset。
操作步骤
git fetch
git rebase -i dev
或者使用更为简洁的命令:
git pull --rebase devx
常见问题:
! [rejected] dev -> dev (non-fast-forward)
一般出现这个问题是由于本地远程分支和服务远程分支不同步造成的,
有两种解决办法:
1、强制推送到远程
2、先fetch 后merger,或者直接git pull
网友评论