本篇文章為大家帶來了關於Git的相關知識,其中主要介紹了rebase的相關問題,rebase,變基,可以直接理解為改變基底。 feature分支是基於master分支的B拉出來的分支,feature的基底是B,希望對大家有幫助。
推薦學習:《Git學習教學》
本文用最簡潔的範例讓你快速掌握rebase原理與用法
一、提交節點圖解
首先透過簡單的提交節點圖解感受一下rebase在做什麼
兩個分支master和feature,其中feature是在提交點B處從master上拉出的分支
master上有一個新提交M,feature上有兩個新提交C和D
此時切換到feature分支上,執行如下指令,相當於想要把master分支合併到feature分支(這一步的場景就可以類比為我們在自己的分支feature上開發了一段時間了,準備從主幹master上拉一下最新改動)
git checkout featuregit rebase master //这两条命令等价于git rebase master feature
下圖為變基後的提交節點圖,說明其工作原理:
- 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變色分叉出來,這不影響理解,知道是表示兩個分支兩條線即可!)
此時,在feature分支上執行git rebase master
變基完成以後,ABCD是原來的feature分支線,ABMC'D'是新的feature分支線,ABM是master分支線(沒有變化)
三、推薦使用場景
搞來搞去那麼多,這其實是最重要的。不同公司,不同情況有不同使用場景,不過大部分情況推薦如下:
- 拉公共分支最新程式碼的時候使用rebase,也就是git pull -r或git pull --rebase,但有個缺點就是rebase以後我就不知道我目前的分支最早是從哪個分支拉出來的了,因為基底變了嘛。 (正因如此,大部分公司其實都不會用rebase,基本上統一使用merge,雖然會多出無意義的一條提交記錄“Merge … to …”,但至少能知道誰做了什麼事)
- 往公共分支上合程式碼的時候,使用merge。 (如果使用rebase,那麼其他開發人員想看主分支的歷史,就不是原來的歷史了,歷史已經被你篡改了。比如張三和李四從共同的節點拉出來開發,張三先開發完提交了兩次然後merge上去了,李四後來開發完rebase上去(注意李四需要切換到主分支,然後執行git rebase,然後再git pull到遠端),則李四的新提交變成了張三的新提交的新基底,本來李四的提交是最新的,結果最新的提交顯示反而是張三的,就亂套了)
推薦學習:《Git教程 》
以上是git學習之rebase實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

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

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

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

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

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

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

解決 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)。檢查防火


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

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

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版