搜尋
首頁開發工具Gitgit學習之rebase實例詳解

本篇文章為大家帶來了關於Git的相關知識,其中主要介紹了rebase的相關問題,rebase,變基,可以直接理解為改變基底。 feature分支是基於master分支的B拉出來的分支,feature的基底是B,希望對大家有幫助。

git學習之rebase實例詳解

推薦學習:《Git學習教學

本文用最簡潔的範例讓你快速掌握rebase原理與用法

一、提交節點圖解

首先透過簡單的提交節點圖解感受一下rebase在做什麼

兩個分支master和feature,其中feature是在提交點B處從master上拉出的分支

master上有一個新提交M,feature上有兩個新提交C和D
git學習之rebase實例詳解
此時切換到feature分支上,執行如下指令,相當於想要把master分支合併到feature分支(這一步的場景就可以類比為我們在自己的分支feature上開發了一段時間了,準備從主幹master上拉一下最新改動)

git checkout featuregit rebase master

//这两条命令等价于git rebase master feature

下圖為變基後的提交節點圖,說明其工作原理:
git學習之rebase實例詳解

  • feature:待變基分支、目前分支
  • master:基分支、目標分支

官方解釋(如果覺得看不懂可以直接看下一段):當執行rebase操作時,git會從兩個分支的共同祖先開始提取待變基分支上的修改,然後將待變基分支指向基分支的最新提交,最後將剛才提取的修改應用到基分支的最新提交的後面。

結合範例解釋:當在feature分支上執行git rebase master時,git會從master和featuer的共同祖先B開始提取feature分支上的修改,也就是C和D兩個提交,先提取到。然後將feature分支指向master分支的最新提交上,也就是M。最後把提取的C和D接到M後面,但這個過程是刪除原來的C和D,生成新的C’和D’,他們的提交內容一樣,但commit id不同。 feature自然最後也是指向D’。

通俗解釋(重要!!):rebase,變基,可以直接理解為改變基底。 feature分支是基於master分支的B被拉出來的分支,feature的基底是B。而master在B之後有新的提交,就等於此時要用master上新的提交來作為feature分支的新基底。實際操作為把B之後feature的提交存下來,然後刪除原來這些提交,再找到master的最新提交位置,把存下來的提交再接上去(新節點新commit id),如此feature分支的基底就相當於是變成了M而不是原來的B了。 (注意,如果master上在B以後沒有新提交,那麼就還是用原來的B作為基,rebase操作相當於無效,此時和git merge就基本沒區別了,差異只在於git merge會多一條記錄Merge操作的提交記錄)

上面的範例可抽象化為如下實際工作場景:張三從B拉了程式碼進行開發,目前提交了兩次,開發到D了;李四也從B拉出來開發了並且開發完畢,他提交到了M,然後合到主幹上了。此時張三想拉下最新程式碼,於是他在feature分支上執行了git rebase master,即把master分支給rebase過來,由於李四更早開發完並合了主幹,如此就相當於張三是基於李四的最新提交M進行的開發了。


二、實際git提交範例

依照上面的圖解構造了提交記錄,如下圖所示:(ABM是master分支線,ABCD是feature分支線。這裡畫成了master變色分叉出來,這不影響理解,知道是表示兩個分支兩條線即可!)
git學習之rebase實例詳解
此時,在feature分支上執行git rebase master

變基完成以後,ABCD是原來的feature分支線,ABMC'D'是新的feature分支線,ABM是master分支線(沒有變化)
git學習之rebase實例詳解


三、推薦使用場景

搞來搞去那麼多,這其實是最重要的。不同公司,不同情況有不同使用場景,不過大部分情況推薦如下:

  1. 拉公共分支最新程式碼的時候使用rebase,也就是git pull -r或git pull --rebase,但有個缺點就是rebase以後我就不知道我目前的分支最早是從哪個分支拉出來的了,因為基底變了嘛。 (正因如此,大部分公司其實都不會用rebase,基本上統一使用merge,雖然會多出無意義的一條提交記錄“Merge … to …”,但至少能知道誰做了什麼事)
  2. 往公共分支上合程式碼的時候,使用merge。 (如果使用rebase,那麼其他開發人員想看主分支的歷史,就不是原來的歷史了,歷史已經被你篡改了。比如張三和李四從共同的節點拉出來開發,張三先開發完提交了兩次然後merge上去了,李四後來開發完rebase上去(注意李四需要切換到主分支,然後執行git rebase,然後再git pull到遠端),則李四的新提交變成了張三的新提交的新基底,本來李四的提交是最新的,結果最新的提交顯示反而是張三的,就亂套了)

推薦學習:《Git教程

以上是git學習之rebase實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:CSDN。如有侵權,請聯絡admin@php.cn刪除
git:版本控制的核心,github:社交編碼git:版本控制的核心,github:社交編碼Apr 23, 2025 am 12:04 AM

Git和GitHub是现代软件开发的关键工具。Git提供版本控制功能,通过仓库、分支、提交和合并管理代码。GitHub则提供代码托管和协作功能,如Issues和PullRequests。使用Git和GitHub可以显著提升开发效率和团队协作能力。

git:版本控制系統,github:託管平台git:版本控制系統,github:託管平台Apr 22, 2025 am 12:02 AM

Git是林納斯·托瓦茲在2005年開發的分佈式版本控制系統,GitHub則是2008年創立的基於Git的代碼託管平台。 Git通過快照管理文件,支持分支和合併,GitHub提供拉取請求、問題跟踪和代碼審查功能,促進團隊協作。

git和github:比較分析git和github:比較分析Apr 21, 2025 am 12:10 AM

Git和GitHub是現代軟件開發中的關鍵工具。 Git是分佈式版本控制系統,GitHub是基於Git的代碼託管平台。 Git的核心功能包括版本控制和分支管理,GitHub則提供協作和項目管理工具。使用Git時,開發者可以跟踪文件變化並協同工作;使用GitHub時,團隊可以通過PullRequests和Issues進行協作。

GitHub:代碼託管平台的簡介GitHub:代碼託管平台的簡介Apr 20, 2025 am 12:10 AM

githubiscrucialforsoftwaredevelopmentduetoitscompheasisecosystemforcodemagementagnagnagnagnagnagn和collaboration.itoffersversioncontrol,communitySupport,andtoolslikegithubictionsandpages.startbymasteringbasicslikemasteringbasicsleatbasicsleatingbasicsleatingareatingareatingarepository,and andranbranches,and andautomatimation,and automatingwo

git和github:開發人員的基本工具git和github:開發人員的基本工具Apr 19, 2025 am 12:17 AM

Git和GitHub是現代開發者的必備工具。 1.使用Git進行版本控制:創建分支進行並行開發,合併分支,回滾錯誤。 2.利用GitHub進行團隊協作:通過PullRequest進行代碼審查,解決合併衝突。 3.實用技巧和最佳實踐:定期提交,清晰的提交消息,使用.gitignore,定期備份代碼庫。

git和github:他們的關係解釋了git和github:他們的關係解釋了Apr 18, 2025 am 12:03 AM

Git和GitHub不是同一個東西:Git是一個分佈式版本控制系統,而GitHub是一個基於Git的在線平台。 Git幫助開發者管理代碼版本,通過分支、合併等功能實現協作;GitHub則提供代碼託管、審查、問題管理和社交互動功能,增強了Git的協作能力。

Git下載後需要設置什麼嗎Git下載後需要設置什麼嗎Apr 17, 2025 pm 04:57 PM

安裝 Git 後,為了更有效地使用,需要進行以下設置:設置用戶信息(姓名和郵箱)選擇文本編輯器設置外部合併工俱生成 SSH 秘鑰設置忽略文件模式

git下載不動怎麼辦git下載不動怎麼辦Apr 17, 2025 pm 04:54 PM

解決 Git 下載速度慢時可採取以下步驟:檢查網絡連接,嘗試切換連接方式。優化 Git 配置:增加 POST 緩衝區大小(git config --global http.postBuffer 524288000)、降低低速限制(git config --global http.lowSpeedLimit 1000)。使用 Git 代理(如 git-proxy 或 git-lfs-proxy)。嘗試使用不同的 Git 客戶端(如 Sourcetree 或 Github Desktop)。檢查防火

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版