2016-07-18 22 views
0

在合併分支時,可能會發生衝突,我們應該解決以完成合並。我們如何僅列出合併中解決衝突的統計信息?如何在合併提交中列出解決衝突的統計信息?

+0

你是什麼意思'我們如何列出合併中解決衝突的統計數據'?請解釋。 – Kaushal

+0

假設您從分支X開始,從分支X創建一個名爲Y的新分支,並向其添加兩個提交,稱爲C1和C2。現在,如果將分支Y合併回分支X(沒有衝突)並查看合併提交中的更改統計信息,則會看到您在提交C1和C2時所做更改的統計信息。但是,如果您在合併過程中遇到衝突,並且您成功解決了衝突,那麼最後合併提交的統計信息將包含提交C1,C2中的更改,並提交您解決衝突的提示。在後面的情況下,我想知道是否有辦法僅查看衝突提交的統計信息。 – mxamin

+0

如果你做'git pull origin Y',它只會做一次提交(衝突提交)。如果你做了'git pull --no-ff origin Y',它會和所有提交合並,包括衝突提交。 – Kaushal

回答

0

TL; DR回答:試試吧。

分支機構在git中有零成本,所以只需創建一對test_merge_sourcetest_merge_destination分支並開始合併。 5-10分鐘後,您完成或者您仍然有一些/一些/多餘的,因爲發生了一些/一些/許多衝突,您可以選擇完成/放棄合併嘗試。


我很抱歉爲您提供一個否定的答案,但您的問題的前提是根本上有缺陷,您要求的是不可能的。

因爲任何計算機算法都不可能確定是否衝突或不是。是的,有些工具可以自動化合併不同的文件,但即使是完美且無故障的合併也可能構成衝突。

問題與要求多少行在版本之間更改的問題相同,這是一個同樣不可回答的問題。

/* example1.c */ 
#include <stdio.h> 
-#include <varargs.h> 
+#include <stdarg.h> 
... 
/* In this diff one line is changed */ 


/* example2.c */ 
#include <stdio.h> 
-#include <varargs.h> 
+#include <math.h> 
... 
/* In this diff one line is removed and one line added */ 

如上所示,如果一條線被改變或者不是完全取決於上下文。因此,沒有(理智的)版本控制工具會試圖告訴你有多少行已經改變,他們只說行被添加/刪除。


現在,您可能會說您對失敗的自動合併感興趣並且實際上不存在衝突。很公平,但這完全取決於所使用的工具。 Git的內部合併處理例如失敗,如果兩行相鄰的行被修改,而KDiff3不會(這通常是你想要的,但是這種錯誤的風險比錯開的行高的風險更高,所以存在折衷)。

這意味着什麼被自動合併不是一個靜態的東西,可以隨着時間而改變。那麼你在尋找什麼不是自動合併到代碼最初合併時使用的git版本,或者當今git的新合併的結果是什麼?

有一個git命令rerere它將記錄解析失敗的合併嘗試,這可能會被用來提取這些信息。但它必須明確啓用,它顯着改變了合併處理,它只是每個存儲庫設置,它只在有限的時間內保留歷史記錄並且可能被清除,所以它遠沒有解決方案。


的這個問題的答案其實只是嘗試,如開始時所指出。