Git正确的协作方式(很简单)
最近部门有人书写了一篇很好的Git协作方式,操作也简单,分支能以保持一条干净的线进行协作开发。这里做个笔记,方便之后查看。
PS:本文非原创。
原则
- 不过分相信自己,自己的修改,可能影响所有人
- 不过分信任别人,别人的修改,可能影响我自己
- branch 和 commit 是 后悔药
- 把大修改分割成小修改,并编写修改描述(commit message)
- 高风险的修改,在未确定影响范围的情况下,[不] 推送到dev
- 高风险的修改,找老司机 审(dian)核(bei)
对策
- 各人保持自己的 branch,在独立的 branch 上进行开发
- 公布修改时,指定推送到 origin/dev
- 周期性对自己的 branch,rebase 到 origin/dev 上
步骤
1. Clone项目
git clone <版本库的网址> <本地目录名>
2. 获取远端最新状态,并从 origin/dev 上创建自己的分支
git fetch --all
git checkout -b fix-file-upload-bug origin/dev # <分支名> <签出点>
git push -u fix-file-upload-bug # 推送当前分支,并映射 origin/fix-file-upload-bug 为默认推送分支
此分支应只有你自己使用
PS:git fetch --prune : 可以获取最新的分支情况
git branch --set-upstream debug origin/debug : 设置本地分支跟远程分支的关联,使得git pull/push不用指定远程分支。
3. 查看、确认修改,创建commit
(假设提交所有) git status
git add -A
git commit -m "[WIP] fix logic on server side, web page not fixed yet" git push # 在远端保留自己的备份以防万一,
# 此操作会提交到 origin/fix-file-upload-bug,不影响origin/dev ... git add -A
git commit -m "[WIP] web page fixed" ... git add -A
git commit -m "[FIX] fix and tested"
(注:与svn不同,commit并不会影响远端分支,也就不可以被别人获取)
4. [rebase]更新本地代码,在 本地 解决冲突(以最新的 origin/dev 为基准)
Git的杀手功能,推荐详细阅读更多资料,欢迎补充。
git pull -r origin dev # 组合命令,拉取 & Rebase
git 当前分支 和 origin/dev 的 commit 纪录,进行 commit by commit 的比对。 相对频繁的 commit,能有效降低 rebase 的难度。
参考阅读 https://git-scm.com/docs/git-rebase 注意模型图
注意解决冲突步骤:
1. 如果有冲突地方,先去解决冲突。
2. 然后执行
git add -A
3. 继续rebase
git rebase --continue
PS : 切记切记不要commit!!
5. [push]把本地代码,立刻公布到 origin/dev上
git push origin HEAD:dev # 手动指定推送到 origin/dev 上(非默认分支 origin/fix-file-upload-bug)
由于步骤4[rebase]的存在,这一步肯定可以成功,且无冲突。
如 origin/dev 被保护,则需要到gitlab上发起MR(merge request),指定目标分支是 origin/dev ,由管理员审核代码后,触发合并操作。
6. 好用的命令
提取Git某次提交修改过的文件
git diff-tree -r --no-commit-id --name-only d18f9d5f17e190cfbb836a4acff2d96c0d466a2c | xargs tar -rf mytarfile.tar
Git比SVN好的地方
1、Git分支的创建、删除、合并非常简单。
SVN如果想把hotfix的东西合并回dev分支,它的可视化界面操作是比较麻烦的。
2、Git暂存修改
如果在开发过程中,突然需要hotfix个东西,Git可以将修改的东西放到暂存区(恢复到上一次提交的状态),hotfix完后再从暂存区恢复就行,这是SVN做不到的。
# 将修改内容提交到暂存区
git stash # 查看暂存区内容
git stash list # 恢复某个暂存区的提交
git stash apply stash@{}
Git正确的协作方式(很简单)的更多相关文章
- 我在阿里这仨月 前端开发流程 前端进阶的思考 延伸学习的方式很简单:google 一个关键词你能看到十几篇优秀的博文,再这些博文中寻找新的关键字,直到整个大知识点得到突破
我在阿里这仨月 Alibaba 试用期是三个月,转眼三个月过去了,也到了转正述职的时间.回想这三个月做过的事情,很多很杂,但还是有重点. 本文谈一谈工作中遇到的各种场景,需要用到的一些前端知识,以及我 ...
- ASP.NET中MD5的加密方式很简单
在ASP.NET中MD5的加密方式很简单,代码如下: FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5&quo ...
- Git多人协作工作流程
前言 之前一直把Git当做个人版本控制的工具使用,现在由于工作需要,需要多人协作维护文档,所以去简单了解了下Git多人协作的工作流程,发现还真的很多讲解的,而且大神也已经讲解得很清楚了,这里就做一个简 ...
- 利用Git进行团队协作
前言: 这里简单介绍一下Git的历史. 同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代.Linux 内核开源项目有着为数众广的参与者.绝大多数的 Linux 内核维护工作都花在了 ...
- 【玩转SpringBoot】看似复杂的Environment其实很简单
喜欢写代码,讨厌配环境 我相信这十个字的小标题代表了大多数码农的心声. 十年前读大学时,学校开设了C语言还有C++.但是学习这两种语言,对于新手来说非常没有成就感. 于是我就在校门口买个光盘,装个VS ...
- Git 多人协作的工作模式
多人协作 148次阅读 当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git rem ...
- git多人协作
多人协作 当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git remote: $ ...
- Git 多人协作开发
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且你的远程仓库的默认名称是origin 查看远程库的信息,用git remote LV@LV-PC ...
- call,apply和bind,其实很简单
call和apply call和aplly作用完全一样,都是在特定的上下文中调用函数,或者说改变函数内部的this指向:区别仅在于接收参数的方式不同. var dog = { name: " ...
随机推荐
- Zepto中文API
原文地址:http://zeptojs.com/ 译文地址:http://www.html-5.cn/Manual/Zepto/ Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, ...
- Unity3D 开发之shader教程(浅谈光照之漫反射diffuse)
在游戏开发过程中,光照应该是必不可少部分,当然,这是指大多数的稍微大型一些的3D游戏会需要,给模型或者山山水水加上光照,会看上去更加的真实,获得更好的体验.一个本身不发光物体显示什么颜色,在于本身反射 ...
- 解决jquery和prototype库冲突问题
在项目中同时引入了jquery.js和prototype.js两个文件,在方法调用时启了冲突. 我们在使用 jQuery 的过程中我们会频繁使用 $ 符号,$是JQuery的别名,所有使用$的地方也都 ...
- Anliven - 有效阅读的方法
讲方法,忌盲目. 阅读方法 做好眼前事 排除其他事项干扰,营造适合阅读的状态和环境,专注地投入阅读之中. 如果被一堆乱糟糟的事情烦扰,身心处于一个疲惫的状态,必然无法保持专注的阅读. 定性定量 每个人 ...
- 分享一个Jquery 分页插件 Jquery Pagination
分页插件来说,我觉得适用就行,尽量简单然后能够根据不同的应用场景能够换肤.展现形式等. 对于初学者想写分页插件的同学,也可以看下源码,代码也挺简单明了的,也助于自己写个小插件. 不过我比较懒,一般直接 ...
- OpenJudge 2990:符号三角形 解析报告
2990:符号三角形 总时间限制: 1000ms 内存限制: 65536kB 描述 符号三角形的第1行有n个由“+”和”-“组成的符号 ,以后每行符号比上行少1个,2个同号下面是”+“ ...
- 表单input项使用label,同时引用Bootstrap库,导致input点击效果区增大
产品姐姐想法多,点击input项才能聚焦进行操作,点击外部不能有反应 好了...直入正题 为了让标签更加语义化,在表单项中,我们往往会使用label进行包裹 <label for="l ...
- .Net语言 APP开发平台——Smobiler学习日志:用Gridview控件设计较复杂的表单
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的”Smobil ...
- iOS阶段学习第21天笔记(ARC内存管理-Copy-代理)
iOS学习(OC语言)知识点整理 一.OC 中的ARC内存管理 1)ARC中释放对象的内存原则:看这个对象有没有强引用指向它 2)strong:强引用,默认情况下的引用都是强引用 3) weak:弱引 ...
- Delphi 10.1 Berlin UTF8String Test
Delphi 10.1 Berlin UTF8String Test procedure TForm1.Button1Click(Sender: TObject); var s: UTF8String ...