最近部门有人书写了一篇很好的Git协作方式,操作也简单,分支能以保持一条干净的线进行协作开发。这里做个笔记,方便之后查看。

PS:本文非原创。

原则

  1. 不过分相信自己,自己的修改,可能影响所有人
  2. 不过分信任别人,别人的修改,可能影响我自己
  3. branch 和 commit 是 后悔药
  4. 把大修改分割成小修改,并编写修改描述(commit message)
  5. 高风险的修改,在未确定影响范围的情况下,[不] 推送到dev
  6. 高风险的修改,找老司机 审(dian)核(bei)

对策

  1. 各人保持自己的 branch,在独立的 branch 上进行开发
  2. 公布修改时,指定推送到 origin/dev
  3. 周期性对自己的 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正确的协作方式(很简单)的更多相关文章

  1. 我在阿里这仨月 前端开发流程 前端进阶的思考 延伸学习的方式很简单:google 一个关键词你能看到十几篇优秀的博文,再这些博文中寻找新的关键字,直到整个大知识点得到突破

    我在阿里这仨月 Alibaba 试用期是三个月,转眼三个月过去了,也到了转正述职的时间.回想这三个月做过的事情,很多很杂,但还是有重点. 本文谈一谈工作中遇到的各种场景,需要用到的一些前端知识,以及我 ...

  2. ASP.NET中MD5的加密方式很简单

    在ASP.NET中MD5的加密方式很简单,代码如下: FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5&quo ...

  3. Git多人协作工作流程

    前言 之前一直把Git当做个人版本控制的工具使用,现在由于工作需要,需要多人协作维护文档,所以去简单了解了下Git多人协作的工作流程,发现还真的很多讲解的,而且大神也已经讲解得很清楚了,这里就做一个简 ...

  4. 利用Git进行团队协作

    前言: 这里简单介绍一下Git的历史. 同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代.Linux 内核开源项目有着为数众广的参与者.绝大多数的 Linux 内核维护工作都花在了 ...

  5. 【玩转SpringBoot】看似复杂的Environment其实很简单

    喜欢写代码,讨厌配环境 我相信这十个字的小标题代表了大多数码农的心声. 十年前读大学时,学校开设了C语言还有C++.但是学习这两种语言,对于新手来说非常没有成就感. 于是我就在校门口买个光盘,装个VS ...

  6. Git 多人协作的工作模式

    多人协作 148次阅读 当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git rem ...

  7. git多人协作

    多人协作 当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git remote: $ ...

  8. Git 多人协作开发

    当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且你的远程仓库的默认名称是origin 查看远程库的信息,用git remote LV@LV-PC ...

  9. call,apply和bind,其实很简单

    call和apply call和aplly作用完全一样,都是在特定的上下文中调用函数,或者说改变函数内部的this指向:区别仅在于接收参数的方式不同. var dog = { name: " ...

随机推荐

  1. codeforces——Little Pony and Expected Maximum

    /* 我们枚举每次选择最大数值的情况:m个数, 投掷n次 最大值是1: 1种 2: 2^n-1 3: 3^n-2^n ..... m: m^n-(m-1)^n 所以最后的结果=sum((k/m)^n ...

  2. c#socket同步通信

    再次特别感谢张子阳老师的文章,读后深感益处. 废话不多说,先贴代码 这是服务器端代码 using System; using System.Collections.Generic; using Sys ...

  3. 一道 google曾出过的笔试题:编程实现对数学一元多项式的相加和相乘操作(1)

    数学中一元n次多项式可表示成如下的形式:  Pn(x)=p0+p1x+p2x^2+…+pnx^n     (最多有 n+1 项,n +1 个系数唯一确定她)      (1)请设计一套接口用以表示和操 ...

  4. 在<a></a>标签中调用javascript脚本

    有时候,我们点击了<a></a>标签(除了跳转到指定链接外)想要它调用某个方法,及调用javascript脚本,该如何做: 方法1:<a href="javas ...

  5. AngularJS入门心得3——HTML的左右手指令

    在<AngularJS入门心得1——directive和controller如何通信>我们提到“AngularJS是为了克服HTML在构建应用上的不足而设计的.HTML是一门很好的为静态文 ...

  6. Codrops 教程:基于 CSS3 的精美模态窗口效果

    Codrops 分享了漂亮的模态窗口效果实现方法,希望给前端开发人员提供一些创新显示对话框的启示.这个方案使用了触发按钮(或任何的 HTML 元素),在点击的时候出现一个模态窗口,带有简单的过渡(或动 ...

  7. 参与github上开源项目的大致流程和注意事项

    Foreword github是一个很火的代码托管服务网站,可能好多人都想参与一两个项目玩一玩学习一下,但由于是纯英文的网站,可能又会止步于想法上没有动手实践.接下来我就介绍一下参与github上开源 ...

  8. Android Fragment 解析和使用

    Android Fragment的生命周期和Activity类似,实际可能会涉及到数据传递,onSaveInstanceState的状态保存,FragmentManager的管理和Transactio ...

  9. 在IBM Bluemix上部署Hyperledger应用

    简介 IBM Bluemix (http://www.ibm.com/bluemix‎)是一个基于cloud的应用开发和部署平台,提供包括多种服务和运行环境的支持.对Hyperledger应用开发者而 ...

  10. Python语言特性之4:类变量和实例变量

    类变量就是供类使用的变量,实例变量就是供实例使用的.如下面的代码: class Person: name = "Tacey" p1 = Person() p2 = Person() ...