使用Git管理项目 使用总结

此文作为在工作工使用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

  1. 切换分支
    git checkout mystudygit1.0

  2. 删除分支
    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代码。
中间为合并的版本,最右边为远程版本,图中也显示了出来。具体可以操作一下试试。

image.png

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,因为会使分支变得混乱。

具体参见:
https://github.com/wxyyxc1992/Coder-Essentials/blob/master/VersionControl/Git/Branch/Rebase/git-rebase-and-the-gloden-rule-explained.md

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.png

git 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容

  • git 指南 git操作 本地操作 git add <file>暂存工作区的修改到暂存区 git commit将暂...
    IrisZL阅读 581评论 0 0
  • 以下笔记主要参考gitgot,大致了解git使用和原理。 第一部分我们从个人的视角去研究如何用好Git,并且揭示G...
    carolwhite阅读 2,370评论 0 1
  • git常用命令总结[https://www.cnblogs.com/fanyegong/p/5127780.htm...
    G__yuan阅读 787评论 0 2
  • 本文针对初级用户,从最简单的讲起,但是需要读者对Git的基本用法有所了解。 Git是开源的分布式版本控制系统,...
    Sachie阅读 1,147评论 0 2
  • Add & Commit git init 初始化一个 Git 仓库(repository),即把当前所在目录变成...
    冬絮阅读 4,806评论 0 8