通过优锐课核心java学习笔记中,我们可以看到,码了很多专业的相关知识, 分享给大家参考学习。

Java中的合并与重组上部分链接:https://www.cnblogs.com/youruike1/p/12376482.html

推力

如果你尝试将重新建立基础的主分支推送回远程存储库,Git将阻止你这样做,因为它与远程主分支冲突。 但是,你可以通过传递--force标志来强制执行推送,如下所示:

 # Be very careful with this command!

 git push --force

这将覆盖远程主分支以匹配你存储库中重新设置的分支,并使团队的其他成员感到非常困惑。 因此,只有当你确切知道自己在做什么时,请务必小心使用此命令。

强制推送的唯一一次情况是在将私有功能分支推送到远程存储库后(例如出于备份目的)执行本地清理后。 这就像说:“糟糕,我并不是真的想推送功能分支的原始版本。 取而代之的是当前的。” 同样,重要的是没有人要处理来自功能分支原始版本的提交。

工作流程演练

只要你的团队感到满意,就可以将基础调整纳入你现有的Git工作流程中。 在本部分中,我们将研究功能开发的各个阶段,重新定标可以提供的好处。

利用git rebase的任何工作流程的第一步都是为每个功能创建一个专用分支。 这为你提供了必要的分支结构,以安全地使用重新基准化:

本地清理

将基础整合到工作流程中的最佳方法之一是清理本地的正在进行的功能。 通过定期执行交互式变基,可以确保功能中的每个提交都具有针对性和意义。 这样,你就可以编写代码,而不必担心将其分解为孤立的提交,你可以在事后对其进行修复。

调用git rebase时,你有两个用于新基础的选项:功能的父分支(例如master)或功能中的较早提交。 我们在交互重定基础部分中看到了第一个选项的示例。 当你只需要修复最后的几次提交时,使用后一种方法是不错的选择。 例如,以下命令开始仅对最后3个提交的交互式变基。

 git checkout feature

 git rebase -i HEAD~3

通过指定HEAD〜3作为新的基础,你实际上并没有移动分支-你只是交互式地重写了紧随其后的3个提交。 请注意,这不会将上游更改合并到功能分支中。By

如果要使用此方法重写整个功能,则git merge-base命令可用于查找功能分支的原始基础。 以下代码返回原始数据库的提交ID,然后你可以将其传递给git rebase:

git merge-base feature master

交互式重定基的这种用法是将git rebase引入工作流的一种好方法,因为它仅影响本地分支。 其他开发人员唯一会看到的是成品,它应该是干净,易于遵循的功能分支历史记录。

但是同样,这仅适用于私有功能分支。 如果你通过同一功能分支与其他开发人员进行协作,则该分支是公开的,并且你不能重写其历史记录。

没有用于通过交互式rebase清除本地提交的git merge替代方案。

将上游更改纳入功能

在``概念概述''部分中,我们了解了功能分支如何使用git merge或git rebase合并来自master的上游更改。 合并是一个安全的选项,可保留存储库的整个历史记录,而重新基准化则通过将要素分支移至master的顶端来创建线性历史记录。

git rebase的这种用法类似于本地清理(可以同时执行),但是在此过程中,它合并了master的上游提交。

请记住,基于远程分支而不是master分支是完全合法的。 与另一位开发人员协作使用同一功能时,可能会发生这种情况,并且你需要将他们的更改合并到存储库中。

例如,如果你和另一个名为John的开发人员将提交添加到功能分支,则从John的存储库中获取远程功能分支后,你的存储库可能如下所示:

你可以使用与从master集成上游更改完全相同的方法来解决此派生问题:将本地功能与john / feature合并,或将本地功能重新建立到john / feature的尖端。

请注意,此重新设置并没有违反``重新设置黄金原则'',因为仅移动了本地功能提交-之前未进行任何操作。 这就像在说:“将我的更改添加到John已经完成的操作中。” 在大多数情况下,这比通过合并提交与远程分支同步更为直观。

默认情况下,git pull命令执行合并,但是你可以通过传递--rebase选项来强制它将远程分支与rebase集成在一起。

通过拉取请求查看功能

如果在代码审查过程中使用拉取请求,则需要在创建拉取请求后避免使用git rebase。 发出拉取请求后,其他开发人员就会查看你的提交,这意味着这是一个公共分支。 重写其历史记录将使Git和你的队友无法跟踪添加到该功能的任何后续提交。

来自其他开发人员的任何更改都需要与git merge合并,而不是git rebase。

因此,在提交拉取请求之前,最好先使用交互式资源库清理代码。

集成批准的功能

在你的团队批准某个功能后,你可以选择在使用git merge将功能集成到主代码库之前,将该功能重新部署到主分支的尖端。

这类似于将上游更改合并到功能分支中,但是由于不允许在主分支中重写提交,因此最终必须使用git merge来集成功能。 但是,通过在合并之前执行变基,可以确保合并将快速进行,从而实现完美的线性历史记录。 这也使你有机会压缩在请求请求期间添加的任何后续提交。

如果你对git rebase不太满意,则可以始终在临时分支中执行rebase。 这样,如果你不小心弄乱了功能的历史记录,可以查看原始分支,然后重试。 例如:

 git checkout feature

 git checkout -b temporary-branch

 git rebase -i master

 # [Clean up the history]

 git checkout master

 git merge temporary-branch

摘要

这就是你真正需要重新建立分支机构的全部知识。 如果你希望没有任何不必要的合并提交的干净,线性的历史记录,则在集成来自另一个分支的更改时,应该使用git rebase而不是git merge。

另一方面,如果你想保留项目的完整历史记录并避免重写公共提交的风险,则可以坚持使用git merge。 两种选择都非常有效,但是至少现在你可以选择利用git rebase的好处。

> 喜欢这篇文章的可以点个赞,欢迎大家留言评论,记得关注我,每天持续更新技术干货、职场趣事、海量面试资料等等
 > 如果你对java技术很感兴趣也可以交流学习,共同学习进步。 
> 不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代

文章写道这里,欢迎完善交流。最后奉上近期整理出来的一套完整的java架构思维导图,分享给大家对照知识点参考学习。有更多JVM、Mysql、Tomcat、Spring Boot、Spring Cloud、Zookeeper、Kafka、RabbitMQ、RockerMQ、Redis、ELK、Git等Java干货

Java中的合并与重组(下)的更多相关文章

  1. Java中的合并与重组(上)

    通过优锐课核心java学习笔记中,我们可以看到,码了很多专业的相关知识, 分享给大家参考学习. 虽然在Git中合并和重组是相似的,但它们具有两种不同的功能. 要保持自己的历史记录整洁或完整,这是你应该 ...

  2. 为什么Java中一个char能存下一个汉字

    在Java中,char的长度是2字节,即16位,2的16次方是65536. 1.如果采用utf-8编码,一个汉字占3个字节,char为什么还能存下一个汉字呢? 参考:https://developer ...

  3. Java 中多态的实现(下)

    Java 中多态的另一个语法实现是重写.重载是通过静态分派实现的,重写则是通过动态分派实现的. 在学习动态分派之前,需要对虚拟机的知识有一个初步的了解. 虚拟机运行时数据区 运行 Java 程序时,虚 ...

  4. java中HashMap在多线程环境下引起CPU100%的问题解决(转)

    最近项目中出现了Tomcat占用CPU100%的情况,原以为是代码中出现死循环,后台使用jstack做了dump,发现是系统中不合理使用HashMap导致出现了死循环(注意不是死锁). 产生这个死循环 ...

  5. java中根据key获取resource下properties资源文件中对应的参数

    properties资源文件是放在resource目录下的: 新建工具类: package com.demo.utils; import java.io.InputStream; import jav ...

  6. java中HashMap在多线程环境下引起CPU100%的问题解决

    最近项目中出现了Tomcat占用CPU100%的情况,原以为是代码中出现死循环,后台使用jstack做了dump,发现是系统中不合理使用HashMap导致出现了死循环(注意不是死锁). 产生这个死循环 ...

  7. Java中的集合框架(下)

    学生选课--判断Set中课程是否存在 package com.imooc.collection; import java.util.ArrayList; import java.util.Arrays ...

  8. java中关键字this的使用

    在团队代码中看到对于当前类中的方法,使用了this关键字.经过测试发现,在此种情况下,this关键字的使用可有可无.因此,对java中this的使用做下总结: package testTHIS; pu ...

  9. Java中List转换为数组,数组转List

    今天写代码遇到一个奇怪的问题,具体代码不贴出了,写一个简化的版本.如下: ArrayList<String> list=new ArrayList<String>();     ...

随机推荐

  1. docker-compose(grafana influxdb) + telegraf 快速搭建简单监控

     灵活实现方案:   1:     telegraf 为go 语言写得占用内存小 收集主机各项监控数据 定时写入 时序DB   influxdb ------------------------&qu ...

  2. Golang的基础数据类型-字符串型

    Golang的基础数据类型-字符串型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符型概述 上一篇博客学习了使用单引号括起来的单个字符就是字符类型,在Golang中有两种表 ...

  3. UVA - 10817 Headmaster's Headache (状压dp+记忆化搜索)

    题意:有M个已聘教师,N个候选老师,S个科目,已知每个老师的雇佣费和可教科目,已聘老师必须雇佣,要求每个科目至少两个老师教的情况下,最少的雇佣费用. 分析: 1.为让雇佣费尽可能少,雇佣的老师应教他所 ...

  4. Fedora 19安装以后的优化

    Fedora 19安装以后的优化 转载自 http://www.zhukun.net/archives/6614 最近安装了Fedora 19 32bit,以下是一些优化配置,使之更适合国人使用. 1 ...

  5. 148-PHP strip_tags函数,剥去字符串中的 HTML 标签(二)

    <?php //定义一段包含PHP代码的字符串 $php=<<<PHP 这里是PHP代码的开始 <?php echo "hello!"; PHP; $ ...

  6. Wdcp升级Php5.3成功

    在lanmp/wdcp/wdOS的当前版本中,默认的php都是用到5.2.17的版本如需要升级到php5.3的,可使用如下脚本升级(注:此升级无安全漏洞等原因,只为某些追求高版本或应用需求需要高版本, ...

  7. HZNU-ACM寒假集训Day12小结 数论入门 题解

    算不出的等式 BJOI2012 看到这题 真没什么办法 无奈看题解 1.注意到p/q 联想到斜率 2.注意到 [ ] 联想到整点 注意到k在变化,构造一次函数 f(x)=p/q*x ,g(x)=q/p ...

  8. HZNU-ACM寒假集训Day12小结 数论入门

    符号说明 a|b      a整除b (a,b)    a与b的最大公因数 [a,b]     a与b的最小公倍数 pα||a    pα|a但pα+1∤a a≡b(mod m) a与b对模m同余 a ...

  9. Bulma CSS框架教程

    Bulma是一个轻量级的现代CSS框架,基于flex,跟bootstrap不一样纯CSS没有JS,与vuejs.reactjs这样JavaScript框架可以很好地集成. 为降低学习难度,让初学者可以 ...

  10. 图床工具PicGO实现七牛云图片上传

    图床工具PicGO实现七牛云图片上传 我们在写博客或者网络文章时经常需要上传图片.目前最有名气的图床工具就是PicGO. 简单的界面,完整的功能,在相册里也能直接复制markdown图片链接.一直深受 ...