Git rebase命令實戰

一、前言

  一句話,git rebase 可以幫助項目中的提交歷史干凈整潔!!!

二、避免合并出現分叉現象

git merge操作

  1、新建一個 develop 分支

  

?  2、在develop分支上新建兩個文件

  

  3、然后分別執行 add、commit、push

  

?  4、接著切換到master分支

?  分別添加c.txt 和 d.txt兩個文件,分別進行add、commit、push

  

  5、現在想把develop分支上開發的部分合并到master分支上

  

  6、git merge 會將master和develop合并的過程通過如下形式展示出來。

?  借助 gitk 命令

  

  借助sourceTree工具

  

git rebase操作

  如果master和develop分支上的這些開發部分都是同一個人操作,在合并的時候不想產生這種分叉的結果,怎么辦呢?

  git-rebase命令簡介:用在從上游分支獲取最新commit信息,并有機的將當前分支和上游分支進行合并。因為develop分支是在master分支基礎上建立的,所以master稱為topic的上游分支。

  1、首先通過 git reset 恢復到master合并之前的狀態

  2、切換到develop分支,執行如下操作

  

  

?  3、如果你想把 rebase 之后的 master 分支推送到遠程倉庫,Git 會阻止你這么做,因為兩個分支包含沖突。但你可以傳入 –force 標記來強行推送。

  

  4、查看一下develop分支合并的效果,如下。

  

  

  看一下rebase的結果,就像是develop先把自己的提交保存起來,然后將master中的提交合并過來,最后在加上自身分支的提交,這樣就不存在分支的合并效果了。

  5、接著切換到master分支,執行git merge 操作就可以了

  

  

  這時候,master和develop分支已經同步了。

?其他異常情況

  在rebase的過程中,也許會出現沖突(conflict). 在這種情況,Git會停止rebase并會讓你去解決 沖突;在解決完沖突后,用"git-add"命令去更新這些內容的索引(index),然后你無需執行 git-commit,只要執行 git rebase --continue。這樣git會繼續應用(apply)余下的補丁。在任何時候,你可以用--abort參數來終止rebase的行動,并且"mywork" 分支會回到rebase開始前的狀態。即git rebase --abort。

手動合并多個commit記錄

rebase -i 命令介紹

?  git rebase -i [startpoint] [endpoint]

  其中-i的意思是--interactive,即彈出交互式的界面讓用戶編輯完成合并操作,[startpoint] [endpoint]則指定了一個編輯區間,如果不指定[endpoint],則該區間的終點默認是當前分支HEAD所指向的commit(注:該區間指定的是一個前開后閉的區間)。
在查看到了log日志后,我們運行以下命令:
  git rebase -i 0bb85c 582db9
  或者
  git rebase -i HEAD~3

  

  上面未被注釋的部分列出的是我們本次rebase操作包含的所有提交,下面注釋部分是git為我們提供的命令說明。每一個commit id 前面的pick表示指令類型,git 為我們提供了以下幾個命令:

  pick:保留該commit(縮寫:p)
  reword:保留該commit,但我需要修改該commit的注釋(縮寫:r)
  edit:保留該commit, 但我要停下來修改該提交(不僅僅修改注釋)(縮寫:e)
  squash:將該commit和前一個commit合并(縮寫:s)
  fixup:將該commit和前一個commit合并,但我不要保留該提交的注釋信息(縮寫:f)
  exec:執行shell命令(縮寫:x)
  drop:我要丟棄該commit(縮寫:d)

rebase -i命令執行

  1、git rebase -i HEAD~3

? ? ?2、編輯合并信息

  

? ? 3、修改commit信息

  

?  4、commit信息預覽

  

?  5、commit合并結果

  

?  6、可以看到master上之后又1條提交記錄了,而develop上還有3個提交記錄

?  

  還是要通過 git push -f 命令將合并的commit結果提交的遠程倉庫中。

  如果develop分支也想要變成master分支這種合并效果,記住不要使用git merge 命令,還時會出現分叉的情況。繼續使用 git rebase master命令

  

自動合并多個commit記錄

命令介紹

  git commit –fixup 自動在commit消息前添加fixup!關鍵字。

  git rebase -i –autosquash 使用rebase自動合并被標記為fixup!的commit,其實是根據sha值來的。

命令操作

  1.繼續修復如下圖所示對應的bug

  

?  2、修改完之后執行 git commit --fixup 需要合并的commit id

  

  3、commit fixup 之后的效果

  

?  4、執行git rebase -i --autosquash 需要合并commit id的父級commit id

    或者

    git rebase -i --autosquash commit id^

  

  5、執行rebase?autosquash結果

  

?

轉載于:https://www.cnblogs.com/hujunzheng/p/9732936.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531219.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531219.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531219.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HttpServletRequestWrapper使用技巧(自定義session和緩存InputStream)

一、前言 javax.servlet.http.HttpServletRequestWrapper 是一個開發者可以繼承的類,我們可以重寫相應的方法來實現session的自定義以及緩存InputStream,在程序中可以多次獲取request body的內容。 二、自定義seesion import javax.servlet.http.*;publi…

spring注解工具類AnnotatedElementUtils和AnnotationUtils

一、前言 spring為開發人員提供了兩個搜索注解的工具類,分別是AnnotatedElementUtils和AnnotationUtils。在使用的時候,總是傻傻分不清,什么情況下使用哪一個。于是我做了如下的整理和總結。 二、AnnotationUtils官方解釋 功能 用于處理注解&…

windows系統nexus3安裝和配置

一、前言 為什么要在本地開發機器上安裝nexus?首先聲明公司內部是有自己的nexus倉庫,但是對上傳jar包做了限制,不能暢快的上傳自己測試包依賴。于是就自己在本地搭建了一個nexus私服,即可以使用公司nexus私服倉庫中的依賴&#xf…

Springmvc借助SimpleUrlHandlerMapping實現接口開關功能

一、接口開關功能 1、可配置化,依賴配置中心 2、接口訪問權限可控 3、springmvc不會掃描到,即不會直接的將接口暴露出去 二、接口開關使用場景 和業務沒什么關系,主要方便查詢系統中的一些狀態信息。比如系統的配置信息,中間件的狀…

log4j平穩升級到log4j2

一、前言 公司中的項目雖然已經用了很多的新技術了,但是日志的底層框架還是log4j,個人還是不喜歡用這個的。最近項目再生產環境上由于log4j引起了一場血案,于是決定升級到log4j2。 二、現象 雖然生產環境有多個結點分散高并發帶來的壓力&…

Springboot集成ES啟動報錯

報錯內容 None of the configured nodes are available elasticsearch.yml配置 cluster.name: ftest node.name: node-72 node.master: true node.data: true network.host: 112.122.245.212 http.port: 39200 transport.tcp.port: 39300 discovery.zen.ping.unicast.hosts: [&…

高效使用hibernate-validator校驗框架

一、前言 高效、合理的使用hibernate-validator校驗框架可以提高程序的可讀性,以及減少不必要的代碼邏輯。接下來會介紹一下常用一些使用方式。 二、常用注解說明 限制說明Null限制只能為nullNotNull限制必須不為nullAssertFalse限制必須為falseAssertTrue限制必須為…

kafka-manager配置和使用

kafka-manager配置 最主要配置就是用于kafka管理器狀態的zookeeper主機。這可以在conf目錄中的application.conf文件中找到。 kafka-manager.zkhosts"my.zookeeper.host.com:2181" 當然也可以聲明為zookeeper集群。 kafka-manager.zkhosts"my.zookeeper.host.co…

kafka告警簡單方案

一、前言 為什么要設計kafka告警方案?現成的監控項目百度一下一大堆,KafkaOffsetMonitor、KafkaManager、 Burrow等,具體參考:kafka的消息擠壓監控。由于本小組的項目使用的kafka集群并沒有被公司的kafka-manager管理,…

RedisCacheManager設置Value序列化器技巧

CacheManager基本配置 請參考博文:springboot2.0 redis EnableCaching的配置和使用 RedisCacheManager構造函數 /*** Construct a {link RedisCacheManager}.* * param redisOperations*/ SuppressWarnings("rawtypes") public RedisCacheManager(RedisOp…

Nginx配置以及域名轉發

工程中的nginx配置 #user nobody; worker_processes 24; error_log /home/xxx/opt/nginx/logs/error.log; pid /home/xxx/opt/nginx/run/nginx.pid;events {use epoll;worker_connections 102400; }http {include /home/xxx/opt/nginx/conf.d/mime.types;default_…

java接口簽名(Signature)實現方案續

一、前言 由于之前寫過的一片文章 (java接口簽名(Signature)實現方案 )收獲了很多好評,此次來說一下另一種簡單粗暴的簽名方案。相對于之前的簽名方案,對body、paramenter、path variable的獲取都做了簡化的處理。也就是說這種方式…

支付寶敏感信息解密

支付寶官方解密文檔&#xff1a;https://docs.alipay.com/mini/introduce/aes String response "小程序前端提交的";//1. 獲取驗簽和解密所需要的參數 Map<String, String> openapiResult JSON.parseObject(response,new TypeReference<Map<String, St…

HashMap 源碼閱讀

前言 之前讀過一些類的源碼&#xff0c;近來發現都忘了&#xff0c;再讀一遍整理記錄一下。這次讀的是 JDK 11 的代碼&#xff0c;貼上來的源碼會去掉大部分的注釋, 也會加上一些自己的理解。 Map 接口 這里提一下 Map 接口與1.8相比 Map接口又新增了幾個方法&#xff1a;   …

SpringMvc接口中轉設計(策略+模板方法)

一、前言 最近帶著兩個兄弟做支付寶小程序后端相關的開發&#xff0c;小程序首頁涉及到很多查詢的服務。小程序后端服務在我司屬于互聯網域&#xff0c;相關的查詢服務已經在核心域存在了&#xff0c;查詢這塊所要做的工作就是做接口中轉。參考了微信小程序的代碼&#xff0c;發…

SpringSecurity整合JWT

一、前言 最近負責支付寶小程序后端項目設計&#xff0c;這里主要分享一下用戶會話、接口鑒權的設計。參考過微信小程序后端的設計&#xff0c;會話需要依靠redis。相關的開發人員和我說依靠Redis并不是很靠譜&#xff0c;redis在業務高峰期不穩定&#xff0c;容易出現問題&…

Springboot定時任務原理及如何動態創建定時任務

一、前言 上周工作遇到了一個需求&#xff0c;同步多個省份銷號數據&#xff0c;解綁微信粉絲。分省定時將銷號數據放到SFTP服務器上&#xff0c;我需要開發定時任務去解析文件。因為是多省份&#xff0c;服務器、文件名規則、數據規則都不一定&#xff0c;所以要做成可配置是有…

轉載:ThreadPoolExecutor 源碼閱讀

前言 之前研究了一下如何使用ScheduledThreadPoolExecutor動態創建定時任務(Springboot定時任務原理及如何動態創建定時任務)&#xff0c;簡單了解了ScheduledThreadPoolExecutor相關源碼。今天看了同學寫的ThreadPoolExecutor 的源碼解讀&#xff0c;甚是NB&#xff0c;必須轉…

Spring BPP中優雅的創建動態代理Bean

一、前言 本文章所講并沒有基于Aspectj&#xff0c;而是直接通過Cglib以及ProxyFactoryBean去創建代理Bean。通過下面的例子&#xff0c;可以看出Cglib方式創建的代理Bean和ProxyFactoryBean創建的代理Bean的區別。 二、基本測試代碼 測試實體類&#xff0c;在BPP中創建BppTest…

使用pdfBox實現pdf轉圖片,解決中文方塊亂碼等問題

一、引入依賴 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>fontbox</artifactId><version>2.0.13</version> </dependency> <dependency><groupId>org.apache.pdfbox</groupId><artif…