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. 【Java基础】RTTI与反射之Java

    一.引言 很多时候我们的程序可能需要在运行时识别对象和类的信息,比如多态就是基于运行时环境进行动态判断实际引用的对象.在运行时识别对象和类的信息主要有两种方式:1.RTTI,具体是Class对象,它假 ...

  2. 【Java基础】通用程序设计

    Num1:for-each循环优先于传统的for循环 java1.5版本发布之前的做法: for(int i=0;i<a.length;i++){ doSomething(a[i]); } ja ...

  3. rsync密码使用要注意的几个点

    1 客户端和服务端的密码文件不一样 服务端的密码文件格式是: 用户名:密码 比如: yejianfeng:123456   客户端的密码文件格式是: 密码: 比如 123456   所以如果一个机器即 ...

  4. 使用James搭建一个自己的邮箱服务器

    ---第一天开发--- 下载Apache James 3.0邮箱服务器,解压到响应的目录 可以看到目录结构: H:\code\JavaCode\James\apache-james-3.0-beta4 ...

  5. Spark RDD到底是个什么东西

    前言 用Spark有一段时间了,但是感觉还是停留在表面,对于Spark的RDD的理解还是停留在概念上,即只知道它是个弹性分布式数据集,其他的一概不知 有点略显惭愧.下面记录下我对RDD的新的理解. 官 ...

  6. Vim快捷键分类

      别用ESC了,用ctrl-[ 更快捷   一. 移动:    h,j,k,l: 左,下,上,右.    w: 下一个词的词首.    e:下一个词的词尾.    b:上一个词的词首.    < ...

  7. 使用ASP.NET MVC局部视图避免JS拼接HTML,编写易于维护的HTML页面

    以前使用ASP.NET WebForm开发时,喜欢使用Repeater控件嵌套的方式开发前台页面,这样就不用JS拼接HTML或者后台拼接HTML了,写出的HTML页面美观.简捷.易于维护,由于不用JS ...

  8. Handler "BlockViewHandler" has a bad module "ManagedPipelineHandler" in its module list

    当你的ASP.NET MVC项跑在IIS时,出现如标题Handler "BlockViewHandler" has a bad module "ManagedPipeli ...

  9. Entity Framework 实体框架的形成之旅--基类接口的统一和异步操作的实现(3)

    在本系列的第一篇随笔<Entity Framework 实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)>中介绍了Entity Framework 实体框架的一些基础知识,以及构建 ...

  10. 全动态Portlet点击后选中样式

    1  背景概述 在配置公司云平台的帮助信息过程中,由于使用的全动态portlet的数据URL获取到的是静态数据,没有办法在后台做选中的逻辑判断,所以需要在前台来控制选中列表的样式,这里将对前台选中列表 ...