1.git stash梳理

1.1git stash的克隆与同步

首先整理下git stash的逻辑是这样

在本地做出了新的修改,提交时显示当前的版本不是最新版本,这时就需要先pull一下自己代码仓库的最新版本的develop。

在git stash的setting中如果设置了自动同步,那自己的代码仓库与总库的代码仓库则会随时同步,这时pull自己的develop就已经会得到最新版本了

1.2服务器版本更新时的做法

在拉下来之后可以选择是使用git rebase达到快进还是直接使用git merge

如果你不是在董铂然博客园看到本文,请点击查看原文

官(li)方(yu)说这里不能直接使用merge,最好先使用rebase,因为如果直接使用merge会将自己新增的功能与最新的版本合并成一个新的版本。而使用rebase是先把最新的版本拉下来,并把自己新增功能的改动编辑在最新的版本里,这样再次提交时,我们新增的改动就是一个独立的版本而不是与某个版本合并所产生的版本。

1.3对比日志图得出结论

看日志图的话效果更加直观

近期代码由我们维护的可以看到日志图如下

每一个版本各自独立,结构清晰

而往期工程师在维护时使用merge,则造成了较为模糊难以理解的日志如下

在往前看以前的MOMA项目日志更加混乱

所以往后的做法都是使用rebase进而达到fast-forward的效果的做法。

2.git squash技术

在使用git作为源代码管理器时,需要时不时将自己所作出的改变commit,以便查询。工作中是建议稍微做一些小的改动就commit的,因为提交的越细看着越清楚。但是当在将自己的代码仓库改过许多细节提交到服务器建立一个pull request时,有时需要将琐碎的多个commit结合起来形成这一个需求的完整commit。这时就需要使用git squash来整理压缩message。

当我修改了四个文件并且每一个步骤都是分开提交的,我的项目git log显示如下:

如果将每一个commit都建立pr并提交到主代码仓库,主库的修改版本会非常多,为今后的维护也加大了难度。如果使用git squash技术可以将多个log集结到一起。 关于具体的代码操作可见下面完整PR操作步骤的2-7步。

3.完整PR操作步骤(12步)

1.git remote -v 先查看下起源避免出错

2.git checkout ChangeBadCode 先切换到自己的项目分支

3.git log 查看下日志,并判断需要将多少个日志合并

4.git rebase -i HEAD~6 把顶部的六个版本聚到一起进入编辑页面

5.把需要压缩的日志前面的pick都改为s(squash的缩写)

这里要注意必须保留一个pick,如果将所有的pick都改为了s那就没有合并的载体了就会报如下错误

这时就只能使用 git rebase --continue 继续编辑或git rebase --abort 取消此次操作来解决问题才能进入下一步。

6.(前面的操作无误的话)输入:wq保存并退出这时出现修改message页面

7.使用vim指令把每个message之间的空格行给删除,并输入:wq

最终达到的效果是这样

8. 想获取develop的最新版本必须先切换到develop  --------git checkout develop

9. git pull origin develop  获取最新的develop版本

10. 需要先切换到自己的分支,才能对develop进行rebase -----git checkout NewFix

11. git rebase develop  把自己新开发的功能快进最新版本

12. 这时候需要先切换到主干才能把自己的分支合并  ------git checkout develop

13. git merge NewFix  这时候才能合并

14. git push origin develop  推到自己的起源代码仓库

15. 在网页上创建pull request向管理员提交变更

附加几个常用指令(后续继续增加):

git branch    查看分支

git reflog      查看这个项目的修改记录

git log --graph --oneline  显示前六位log码和对应的message

git checkout -b NewFix  在主分支上建立一个新的分支。

git cherry-pick ChangeBadCode 在新的分支上复制旧分支的改变

git branch -d ChangeBadCode 删除一个分支。 -D是强制删除

git add .  把改动全部加上。 (可以先用git status显示出不同的diff)然后add 单个文件

git commit --amend  给刚提交的commit订一下,但是不生成log

git stash提交PR的正确步骤&git squash技术的更多相关文章

  1. git stash命令及提交指定文件

    一.git stash命令 常用git stash命令: (1)git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stas ...

  2. Git 分支管理-git stash 和git stash pop

    https://blog.csdn.net/u010697394/article/details/56484492 合并分支,冲突是难免的,在实际协作开发中我们遇到的情况错综复杂,今天就讲两个比较重要 ...

  3. git stash 用法总结和注意点

    常用git stash命令: (1)git stash save "save message"  : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不 ...

  4. git stash回退

    目录 1.起因 2. 问题出现 3.修复 4. 注意 1.起因 这个问题要从今天刚遇到的事儿说起,昨晚代码出了个乌龙事件,本来正在dev分支进行新功能的开发,但是测试出现的问题是在release 分支 ...

  5. git stash -u 添加新文件

    git 提交 有新文件执行    git stash -u ------ 如果已经执行git stash,会发现有UNtracked这个单词 说明新文件没有添加进去,此时 执行  git stash ...

  6. git stash的使用

    https://git-scm.com/docs/git-stash 在git svn的时候使用,提交记录的时候,有部分文件的修改不需要commit. 在向svn进行git svn dcommit的时 ...

  7. git stash解决代码merge出错

    最近在使用git提交代码时,遇到一个问题,就是我修改了几个文件的代码,然后又想把自己代码库里面的代码更新到最新版本,然后不出所料,代码冲突了!作为一个喜欢解决问题的程序员,怎么会被这样的问题所困住呢? ...

  8. git 命令提交项目到github

    git 命令提交项目到github步骤如下: 1.使用git 命令客户端进入项目根路径,输入 git init  命令,创建github本地根目录 2.把文件加入到本地项目 git add .  ,如 ...

  9. (转)git stash使用

    使用情形 综合下网上的介绍和资料,git stash(git储藏)可用于以下情形: 发现有一个类是多余的,想删掉它又担心以后需要查看它的代码,想保存它但又不想增加一个脏的提交.这时就可以考虑git s ...

随机推荐

  1. 基于HT for Web 3D呈现Box2DJS物理引擎

    上篇我们基于HT for Web呈现了A* Search Algorithm的3D寻路效果,这篇我们将采用HT for Web 3D来呈现Box2DJS物理引擎的碰撞效果,同上篇其实Box2DJS只是 ...

  2. 【Swift学习】Swift编程之旅---方法(十五)

    在Swift中结构体和枚举也能够定义方法,而在 Objective-C 中,类是唯一能定义方法的类型. 实例方法 实例方法是属于某个特定类.结构体或者枚举类型实例的方法,实例方法提供访问和修改实例属性 ...

  3. 【视频处理】YUV格式说明

    YUV,是一种颜色编码方法,Y表示明亮度(Luminance.Luma),U和V则是色度.浓度(Chrominance.Chroma). YUV,Y`UV,YCbCr,YPbPr等都可以称为YUV,彼 ...

  4. jquery_layout

    http://layout.jquery-dev.com/documentation.cfm

  5. Win10怎么输入法切换

    按 windows 键+空格键,或者CTRL+Shift,或者只按 Shift,或者CTRL+空格 试试 方法/步骤1在桌面上点击[控制面板],进入控制面板后使用分类显示控制面板内的选项.然后在语言下 ...

  6. C#编程总结(十三)数据压缩

    C#编程总结(十三)数据压缩 在进行文件存储或者数据传输时,为了节省空间流量,需要对数据或文件进行压缩.在这里我们讲述通过C#实现数据压缩. 一.GZipStream压缩 微软提供用于压缩和解压缩流的 ...

  7. iOS 学习笔记二【cocopods安装使用和安装过程中遇到的问题及解决办法】【20160725更新】

    在osx 10.11之前cocopods问题不多,但是升级到11之后的版本,之前的cocopods大多用不了,需要重新安装,对于我这种使用测试版系统的技术狂来说,每次都需要重新安装很多东西, 当然,c ...

  8. 背水一战 Windows 10 (7) - 控件 UI: VisualState, VisualStateManager, 控件的默认 UI

    [源码下载] 背水一战 Windows 10 (7) - 控件 UI: VisualState, VisualStateManager, 控件的默认 UI 作者:webabcd 介绍背水一战 Wind ...

  9. jquery属性选择器(同时匹配多个条件)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 【Java每日一题】20161028

    package Oct2016; public class Ques1028 { public static void main(String[] args){ new B().out(); // 输 ...