主頁 > 資料庫 > Git如何管理自動解決的合并?

Git如何管理自動解決的合并?

2021-11-10 14:23:32 資料庫

我研究了什么是git merge操作以及當它發現無法自動解決的沖突時它會做什么。
如果我可以手動解決沖突,我可以選擇要保存的內容和要更改的內容。

另一方面,我們有快進合并,如果一個分支是另一個的直接祖先,另一方面,不是快進合并而是自動解決。
在這里,我發現很難理解 Git 如何處理這兩種情況:我已經看到它自動選擇要更改的內容,但我怎么知道它是否按照我的意愿做事?

例如,在test我使用file.txt分支上,而在master分支上我有另一個版本的file.txt
這兩個分支共享一個共同的祖先。
我執行git checkout master然后我想與test.
為此,我將數字git merge test. 那會發生什么呢?

  1. master 有完全不同的內容
  2. master包含testfile.txt版本中不存在的文本
  3. master文本比里面file.txttest

我的問題涉及一個通用案例:我如何在運行之前理解git merge testGit 將如何處理這些合并?
也許這取決于我開始時當前所在的分支git merge

uj5u.com熱心網友回復:

讓我們看看我是否可以在一個簡短的帖子中涵蓋所有內容:

  • Git 有多種合并策略當您跑步時,git merge您可以選擇一種策略,例如git merge -s resolve othergit merge -s octopus br1 br2 br3標準策略是ours, recursive, resolve, subtree, octopus, 現在是新的ort.

  • 幾乎所有的實際作業都是由該策略完成的。因此,在決定合并的操作方式之前,您必須知道將使用哪種策略。

  • 大多數合并的默認策略 recursive并且可能很快會變成ort. 這兩個主要用于相同的作業,除了ort應該更快并且更好地處理一些棘手的情況。(注意:這是目標狀態,而不是當前狀態,這就是為什么它還不是默認狀態。)但是,如果您將多個“頭”(確實git merge提交)賦予,則默認值為octopus

除了ours策略(不需要合并基礎,我認為不需要計算一個)和octopus策略(使用替代的合并基礎計算),這些合并必須找到(單一的)合并基礎提交。為了找到那個提交,Git 使用了擴展到 DAGs最低公共祖先演算法您可以手動運行它:

git merge-base --all HEAD otherbranch

例如。但作為一個“全”選項的存在意味著,和維基百科的鏈接明確,從該演算法的輸出可能超過一個承諾

如果只有一個合并基地,一切都很好。如果沒有,每個策略都必須對此有所作為。(章魚策略會做任何事情,因為它首先沒有使用這個演算法;我從來沒有深入研究過這個問題的底部,因為我很警惕Balrogs錯誤。)該resolve策略使用了一個簡單但可怕的方法答案:它在(明顯)隨機選擇一個并使用它。recursive然而,默認策略只是簡單地合并合并基(不使用章魚演算法,而是使用ort試圖改進的略有 Balrog 纏身的遞回方法;我等著看結果......)。

跳過一些遞回合并細節(但請注意,這就是“遞回”合并驅動程式條目的內容),我們繼續前進:該subtree策略實際上只是recursive偽裝演算法,因此它處理這些與-s recursive. ours策略忽略所有其他輸入:其最終提交只是HEAD提交的內容,具有額外的父項,因此合并基礎問題變得無關緊要。如前所述,章魚一開始就沒有使用git merge-base --all因此,如果我們需要遞回合并,執行它的策略會合并合并基礎并提交結果(包括任何合并沖突,這是 Balrog 對您的任務造成嚴重破壞的主要地方)。這個合并的結果 然后是合并操作的新合并基礎。

所以,這讓我們得到了一個單一的合并基礎,要么扔掉額外的 ( -s resolve) 要么合并它們(其他所有東西,除了-s oursand -s octopus,它們甚至不在這里)。我們現在正好有三個提交要考慮進行合并:B,合并基礎;L,“本地”或--ours提交;R,“遠程”或“其他”或--theirs提交。可以假設這些提交具有某種先行/后繼關系,1但它不再重要:各種雙頭合并演算法現在準備考慮三種可能的情況:2

  1. 乙= R如果合并基礎提交“他們的”提交,則無事可做。Git 說Already up to date.和不做。
  2. 乙= L如果合并基礎“我們的”(HEAD)提交,則可以進行快進如果允許或需要,Git 會去做。這種情況下不可能發生沖突;見下文。
  3. B?L,B?R需要“真正的合并”。

為了執行真正的合并,Git 執行以下內部化變體:

  • 運行:這是“我們改變的”;git diff --find-renames B L
  • 運行:這是“他們改變的”;git diff --find-renames B R
  • 結合這些變化。

The combine changes step is where merge conflicts can occur. They do occur if:

  • lines affected in diff #1 overlap lines affected in diff #2, but the changes to those lines are not identical, or
  • lines affected in the two diffs abut (as jthill noted).

Overlap is allowed if and only if the two diffs make the same change to those lines.

If we force a "real merge" where a fast-forward is allowed (see #2), this means B = L, so the diff from B to L is empty. An empty diff never conflicts with another empty diff, nor with any non-empty diff: the result of combining is to take all of their changes.

If we *do *have conflicts, the -X ours or -X theirs flags, if specified, now come into play: these resolve the conflict by favoring ours or theirs. For these cases, the merge is not stopped.

If we have rerere enabled and there are now conflicts that have recorded resolutions, Git will take the recorded resolution. For these cases, however, the merge is stopped: you must inspect the result yourself. Presumably this therefore happens after the -X cases, but I have not tested that.

If there are unresolved conflicts, the merge stops here, unfinished. It is your job to clean up any messes left behind (in your working tree and/or Git's index). Otherwise, unless --squash and/or --no-commit were specified, Git goes on to make the new merge commit.

如果合并停止MERGE_HEAD,除非--squash指定,否則另一個頭的(或頭的)哈希 ID 將寫入偽參考這確保下一個git commit將正確結束合并。


1如果他們沒有,我們必須提供--allow-unrelated-histories,在這種情況下,合并基礎是在兩個分支提示提交之前的虛擬空提交。相同的代碼用于cherry-pick 和revert,其中某些先行/后繼關系可能不會有意保持,因此不會檢查;此描述僅用于git merge目的。

2可以預先檢查R ? L,但我認為 Git 實際上不會。無論哪種方式,效果都應該相同。

uj5u.com熱心網友回復:

我怎么能理解,事先運行 git merge test,Git 將如何處理這些合并?

你不能事先理解它,但你可以在不實際提交合并的情況下進行合并,因此你可以研究結果。說啊

git --no-ff --no-commit merge test

然后環顧四周。

uj5u.com熱心網友回復:

在運行之前git merge test我如何理解Git 將如何處理這些合并?

在一些罕見的(基本上從來沒有無意產生的)情況下,基本操作下面會有額外的準備作業,或者整個事情可以在微不足道的“快進”情況下被回避,但是:看看git merge test將使用什么, 說

git diff ...test    # diffs on test since histories diverged
git diff test...    # diffs in checkout since test history diverged

這些是 Git 將合并的兩組差異。

Git 有一個默認的自動合并,它應用所有不重疊或不鄰接任何不同變化的大塊頭,但重疊或鄰接的變化塊不能可靠地自動合并,沒有人想出如何推匯出“正確”的將軍結果,所以你必須解決這個問題。

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/354937.html

標籤:混帐 github git合并 git分支 git合并冲突

上一篇:Git上的兩個分支是1次提交,但代碼沒有差異

下一篇:通過github上的專案創建生成時如何將.gitignore鏈接到本??地??專案?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more