最近部门有人书写了一篇很好的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@{0}

转载于:https://www.cnblogs.com/lovesong/p/5399336.html

Git正确的协作方式(很简单)相关推荐

  1. ppt文件太大怎么变小,这6种方式很简单

    ppt文件太大怎么变小? ppt文件通常用于公司会议.教育授课和商务演讲等场合,由于需要实现各种文档效果并插入大量图片,因此文件大小要远大于普通文档文件,占用的存储空间也不少.如果电脑中存储了大量PP ...

  2. 自定义控件其实很简单 二

    上一节我们粗略地讲了下如何去实现我们的View并概述了View形成动画的基本原理,这一节我们紧跟上一节的步伐来深挖如何去绘制更复杂的View! 通过上一节的学习我们了解到什么是画布Canvas什么是画 ...

  3. 自定义控件其实很简单1/6

    尊重原创转载请注明:From AigeStudio(http://blog.csdn.net/aigestudio)Power by Aige 侵权必究! 炮兵镇楼 上一节我们粗略地讲了下如何去实现我 ...

  4. 自定义控件其实很简单2

    上一节我们粗略地讲了下如何去实现我们的View并概述了View形成动画的基本原理,这一节我们紧跟上一节的步伐来深挖如何去绘制更复杂的View! 通过上一节的学习我们了解到什么是画布Canvas什么是画 ...

  5. 自定义控件其实很简单2/12

    转载:http://blog.csdn.net/aigestudio/article/details/41316141 上一节我们粗略地讲了下如何去实现我们的View并概述了View形成动画的基本原理 ...

  6. 有了SEO思维你的SEO会很简单!

    从有了SEO这个职业快排的声音就一直没有断过,而网上现在刷快排的方式原理其实也非常简单,只是操作的时候也是需要借助白帽的网站优化经验合理的控制住相应的频率,所谓的发包其实说白了也是模拟用户点击,这里不 ...

  7. 怎么把pdf压缩的小一点 这3种方式都很简单

    在日常工作中,我们常常会遇到PDF文件太大无法上传的情况.这种情况在通过聊天工具传输工作PDF文件资料或在发送附件邮件时尤为常见.如果你也遇到过类似的问题,那么怎么把pdf压缩的小一点?网上的方法虽然 ...

  8. 2022年高考普通高等数学第五题流程图答案,用少儿编程的方式怎么实现?其实很简单

    2022年高考普通高等数学第五题流程图答案,用少儿编程的方式怎么实现?其实很简单的. 我们先来看一下这次高考的数学题(这样的流程程序题,基本每年都会有): 我们先看一下使用图形化少儿编程软件:scra ...

  9. “很简单”的十种表达方式

    1)It's really simple.很简单. 2)It's a piece of cake.小事一桩. 3)It's as easy as pie.真是易如反掌. 4)It's no big d ...

最新文章

  1. Django数据库的查看、删除,创建多张表并建立表之间关系
  2. JVM 调优实战--常用JVM命令:jps/jinfo/jstat/jmap/jstack/jhat
  3. 【译】LiveData 在 SnackBar/Navigation 情景下的使用(SingleLiveEvent)
  4. 王力宏《十八般武艺》新碟 测评
  5. [ZJOI2012]数列
  6. 华科05-03年计算机考研复试机试
  7. 怀仁一中计算机等级考试网页,2021年度初中计算机等级考试理论复习题.doc
  8. C#网络编程----(一)获取IP地址
  9. iperf3使用方法 linux,iperf3命令使用
  10. [密码学]如何生成PKCS8密钥
  11. mysql健康档案管理系统_益康居民健康档案管理系统(网络版)
  12. 尚学堂视频笔记五:IO流
  13. 公平的席位分配MATLAB编程(Q值法)
  14. 二级路由器的设置上网
  15. 基于嵌入式设备的 单目标跟踪算法
  16. 各大厂家人脸识别对比
  17. 用四阶龙格库塔法(RK4)求解二阶微分方程
  18. 软件测试岗位有哪些任职要求?
  19. append()与prepend()的区别
  20. 【爬虫】每天定时爬取网页小故事并发送至指定邮箱

热门文章

  1. 运用CSS3制作3D盒子骰子
  2. 在PowerDesigner导出到数据库的方法
  3. jQuery之创建节点
  4. objective-c和java哪个简单_Objective-C和Java的简单对比
  5. 操作系统—基本地址变换机构
  6. LuaForUnity1:Lua介绍与使用
  7. Unity3D之UGUI基础5:Toggle复选框
  8. bzoj 1658: [Usaco2006 Mar]Water Slides 滑水(贪心)
  9. bzoj 3209: 花神的数论题 喵哈哈村的秘境探险(四)
  10. .NET Framework学习笔记(八)