在開發中使用git rebase的場景

rebase介紹

一、背景

遠程倉庫有oh4w-devoh4k-dev兩個分支,oh4k-dev是基于oh4w-dev開發到80%的代碼新拉的分支;此后兩條分支同步開發,當oh4k-dev開發完成,oh4w-dev還在開發階段,oh4k-dev需要拉取到oh4w-dev自分出oh4k-dev后的最新提交。

二、git pull VS git rebase

有兩種方法,git pullgit rebase

git pull

git pull其實是git fetchgit merge的組合

當執行git pull時,相當于執行了git fetch從遠程倉庫拉取最新代碼、git merge將拉取的最新代碼和本地代碼合并

使用git pull,雖然在存在沖突時,會多出無意義的一條提交記錄“Merge…to…”,但能清楚地知道當前分支上誰合了代碼以及合代碼的時間先后順序

git rebase

git rebase則是將當前分支的提交歷史,建立在指定分支上的和當前分支的公共祖先節點的最新提交上(不論提交的時間先后順序)

三、選擇git rebase的理由

目前的情況使用git rebase更加合適,因為oh4w-dev仍然在開發過程中,即使使用git pull合并一次代碼,下次oh4k-dev再次拉取oh4w-dev最新代碼時,上次合并過的沖突還需要重復處理;而使用git rebase合并一次提交歷史,oh4w-devoh4k-dev的提交記錄的公共祖先節點已經更新了,無需再處理一遍上次處理過的沖突

四、使用git rebase遇到的問題

問題一

本地倉庫中,與遠程分支oh4w-devoh4k-dev對應的分支分別是local-oh4w-devlocal-oh4k-dev

站在local-oh4k-dev分支使用git rebase local-oh4w-dev拉取local-oh4w-dev的最新提交歷史,很幸運沒有沖突,但在執行git push --force-with-lease進行強制提交時終端報錯

分析了一下原因,是因為這個項目在git push提交修改到Gerrit遠程倉庫時,每次提交都需要攜帶Change-IdChange-Id是Gerrit等代碼審查工具用來跟蹤提交的唯一標識符,如果Gerrit判斷推送的變基后的提交歷史中包含已經被合并到主分支或已經關閉的修改(即存在相同的Change-Id),則會導致提交被拒絕

還有一點,推送的遠程分支是Gerrit中的refs/for/<branch>,這是一個特殊的引用命名空間,用于接受代碼審查的推送,Gerrit不會像傳統分支那樣檢查其狀態;而git push --force-with-lease的核心邏輯是檢查遠程分支的當前狀態是否與本地引用的遠程分支狀態一致,所以git push --force-with-leaserefs/for/oh4k-dev是無效的,與普通的git push幾乎相同

解決方法
如果Change-Id沖突,可以重新生成新的Change-Id

  • 如果是單個commit記錄
    1.使用git commit --amend修改提交記錄
    2.刪除舊的Change-Id
    3.esc退出編輯模式
    4.輸入:wq保存
    5.Git會自動生成一個新的Change-Id
    6.git push origin local-oh4k-dev:refs/for/oh4k-dev將本地的變更推送到遠程

  • 如果有多條提交記錄需要修復,可以使用交互式變基
    1.使用git rebase -i HEAD~n選擇最新的n條commit記錄進入編輯模式
    2.輸入i開啟編輯操作
    3.將需要修改的提交記錄的pick改為edit
    在這里插入圖片描述

    4.esc退出編輯模式
    5.輸入:wq保存
    6.在每一條提交記錄處停留,用處理單個提交記錄的方式處理
    7.每處理完一條,執行git rebase --continue,直到變基結束
    8.git push origin local-oh4k-dev:refs/for/oh4k-dev將本地的變更推送到遠程

問題二

變基結束,將本地合并后的提交歷史上傳到遠程,意味著,之前在local-oh4k-dev上提交過的修改,需要重新提交一次,可能會存在沖突

解決方法
1.使用git rebase -i HEAD~n啟動交互式變基
2.修改第一條提交之外的狀態為fixup(自動合并修改但丟棄提交信息)或squash(自動合并修改且允許修改提交信息)
3.如果產生沖突,解決完沖突后git add .git rebase --continue繼續變基
4.變基結束git commit --amend生成新的Change-Id
5.最后git push origin local-oh4k-dev:refs/for/oh4k-dev推送本地變更

問題三

本地的提交歷史由于進行了rebase已經改變,而git push不會覆蓋遠程倉庫的提交歷史,只是新增了剛剛push上去的新的變更,所以本地的提交歷史和遠程倉庫還是不一致的,可以通過git reset --soft origin/oh4k-dev,將兩者進行同步

思考
這樣一條一條提交記錄去刪除,記錄較少的情況下還好處理,一旦數據量過大,很浪費時間,看看可以不可以一鍵刪除?

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

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

相關文章

TDengine 時序函數 NOW() 用戶手冊

TDengine NOW() 函數用戶使用手冊 目錄 功能概述函數語法返回值說明技術特性使用場景及示例時間運算操作注意事項常見問題 功能概述 NOW() 函數是 TDengine 中的時間函數&#xff0c;用于獲取客戶端當前系統時間。該函數在時序數據庫中特別有用&#xff0c;可以用于數據插入…

JavaWeb ——事務管理

文章目錄事務管理事務回顧Spring事務管理事務進階事務屬性 - 回滾 rollbackFor事務屬性 - 傳播行為 propagationSpring框架第一大核心: IOC控制反轉&#xff0c; 其第二大核心就是 AOP 面向切面編程 事務管理 事務回顧 Spring事務管理 # spring 事務管理日志 logging:level:org…

【跨國數倉遷移最佳實踐8】MaxCompute Streaming Insert: 大數據數據流寫業務遷移的實踐與突破

本系列文章將圍繞東南亞頭部科技集團的真實遷移歷程展開&#xff0c;逐步拆解 BigQuery 遷移至 MaxCompute 過程中的關鍵挑戰與技術創新。本篇為第八篇&#xff0c;MaxCompute Streaming Insert&#xff1a; 大數據數據流寫業務遷移的實踐與突破。注&#xff1a;客戶背景為東南…

2025-09-05 CSS4——浮動與定位

文章目錄1 顯示&#xff08;Display&#xff09;1.1 visibility:hidden1.2 display:none2 塊和內聯元素2.1 塊元素2.2 內聯元素2.3 改變元素的顯示方式3 浮動&#xff08;Float&#xff09;3.1 float 屬性3.2 clear 屬性4 定位&#xff08;Position&#xff09;4.1 五種定位模式…

43這周打卡——生成手勢圖像 (可控制生成)

目錄 前言 1.導入數據及數據可視化 2.構建模型 3.訓練模型 4.模型分析并生成指定圖像 總結 前言 &#x1f368; 本文為&#x1f517;365天深度學習訓練營中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 1.導入數據及數據可視化 from torchvision import data…

TDengine 時間函數 TIMEDIFF() 用戶手冊

TDengine TIMEDIFF() 函數詳細使用手冊 目錄 功能概述函數語法參數說明返回值說明版本變更說明技術特性使用場景及示例時間單位處理數據類型兼容性注意事項常見問題最佳實踐 功能概述 TIMEDIFF() 函數用于計算兩個時間戳的差值&#xff0c;返回 expr1 - expr2 的結果。結果…

【2025ICCV-持續學習方向】一種用于提示持續學習(Prompt-based Continual Learning, PCL)的新方法

1. 背景與問題 (Background & Problem):?? ?持續學習 (CL):?? 目標是在不遺忘舊任務知識的情況下,讓模型持續學習一系列新任務。主要挑戰是災難性遺忘。 ?基于提示的持續學習 (PCL):?? 利用預訓練視覺Transformer (ViT),凍結其權重,通過微調稱為“提示”(prompt…

2025 年 08 月 GitHub 十大熱門項目排行榜

歡迎來到 2025 年 8 月 GitHub 熱門開源項目排行榜&#xff01;本月榜單集中展示了來自智能體平臺、AI 編程助手、多模態角色系統、本地化部署工具到可視化白板與企業協同平臺的多元創新。從構建 AI 助手中樞的 Archon&#xff0c;到終端 AI 編碼拍檔 Crush&#xff0c;再到虛擬…

LeetCode每日一題,2025-9-4

多數元素 投票法 讓你找到序列中出現超過二分之一的元素&#xff0c;一定要記住這個規則。 記錄兩個值val和cnt&#xff0c;剛開始val為任意數&#xff0c;cnt0。 如果cnt是0&#xff0c;就把當前val num。接下來判斷&#xff0c;ifnum val&#xff0c;則cnt &#xff0c;e…

第7章 安全配置

7.1 安全概述 Jenkins安全威脅 常見安全風險&#xff1a; 訪問控制風險&#xff1a; - 未授權訪問Jenkins實例 - 權限提升攻擊 - 橫向移動攻擊 - 敏感信息泄露代碼執行風險&#xff1a; - 惡意腳本注入 - 構建腳本篡改 - 插件漏洞利用 - 遠程代碼執行數據安全風險&#xff1a; …

騰訊混元世界模型Voyager開源:單圖生成3D世界的“核彈級”突破,游戲、VR、自動駕駛迎來新變量

當AI繪畫、視頻生成技術逐漸從“新鮮感”走向“實用化”&#xff0c;3D內容生成卻始終卡在“效率低、成本高、門檻高”的瓶頸里。傳統3D建模需要專業軟件、大量人工調整&#xff0c;甚至依賴昂貴的硬件設備&#xff0c;讓中小團隊和個人創作者望而卻步。 但騰訊AI實驗室最近開…

數據庫(基礎操作)

SQL 結構化的查詢語句 我們現在需要寫SQL語句 --- 這個玩意兒就是數據庫的操作語句我們的數據庫就類似于一個excl表格它有n列&#xff0c;每一列為一個大類&#xff0c;數據以行存在&#xff0c;一行代表一個條目數據如&#xff1a;我現在想建立一個數據庫保存學生的信息你需要…

linux ubi文件系統

1&#xff0c;UBI&#xff08;Unsorted Block Images&#xff09;是 Linux 內核中為原始 Flash 設備提供的一種抽象層&#xff0c;位于 MTD&#xff08;Memory Technology Device&#xff09;和文件系統&#xff08;如 UBIFS&#xff09;之間。它負責壞塊管理、磨損均衡、邏輯卷…

深度厚金板PCB與厚銅PCB的區別

厚金板PCB和厚銅PCB在電子制造領域都有重要應用&#xff0c;它們有著不同的特點和適用場景。下面為你詳細介紹二者的區別。厚金PCB是什么厚金PCB是在印制電路板表面鍍上較厚金層的電路板。這層厚金能提升電路板的導電性、抗氧化性和耐磨性。在一些對信號傳輸要求極高、使用環境…

一階低通濾波器應用示例(演示)

1. 代碼 這段代碼實現了一個一階低通濾波器&#xff08;也稱為指數加權移動平均濾波器&#xff09;。它適用于需要平滑數據、減少噪聲的場合。以下是一些常見的應用場景&#xff1a; 傳感器數據平滑&#xff1a;在嵌入式系統或物聯網設備中&#xff0c;傳感器&#xff08;如溫度…

RT-Thread源碼分析字節實現socket源碼

無論是客戶端還是服務器程序&#xff0c;發送的底層都是發送AT指令&#xff1a;1&#xff09;發送命令到串口&#xff1b;2&#xff09;阻塞等待返回結果接收的底層都是1&#xff09;阻塞等待&#xff1b;2&#xff09;被喚醒后拷貝處理數據兩者均由后臺任務喚醒&#xff0c;后…

keil 5 STM32工程介紹

目錄 一、工程文件介紹 1.自動生成的文件 2.自建文件 &#xff08;1&#xff09;USER 文件夾 &#xff08;2&#xff09;FWLIB 文件夾 &#xff08;3&#xff09;CMSIS 文件夾 二、工程創建教程 1.下載固件庫 2.創建工程 &#xff08;1&#xff09;創建不完善的工程 …

AI大模型如何重塑日常?從智能辦公到生活服務的5個核心改變

AI大模型重塑日常&#xff1a;從智能辦公到生活服務的5個核心改變一、引言? 簡述AI大模型技術的快速發展背景&#xff0c;說明其已從技術領域逐步滲透到大眾日常生活? 提出核心觀點&#xff1a;AI大模型正從辦公和生活服務兩大場景&#xff0c;深度改變人們的行為模式與…

邁威通信從送快遞角度教你分清網絡二層和三層

還在為網絡里的二層、三層概念頭大?其實就像送快遞那么簡單!今天邁威通信用最接地氣的方式給你講明白&#xff5e;網絡傳輸 送快遞?沒錯!二層網絡&#xff1a;本地送貨員負責同小區的包裹配送(局域網傳輸)&#xff0c;就像小區里的快遞站(對應設備&#xff1a;交換機)&#…

【Linux】網絡安全管理:SELinux 和 防火墻聯合使用 | Redhat

本專欄文章持續更新&#xff0c;新增內容使用藍色表示。 往期相關內容 【Linux】權限管理詳解&#xff08;三&#xff09;&#xff1a;SELinux安全性管理 | Redhat-CSDN博客 【Linux】網絡安全管理&#xff1a;Netfilter、nftables 與 Firewalld | Redhat_linux netfilter-C…