2014-03-19 41 views
1

我需要向需要檢查PR的人展示我修復的衝突。 有沒有辦法用git在文本文件中導出所有的衝突?在文本文件中導出GIT中的所有衝突

我需要的是一個包含合併

+0

你有沒有考慮過使用補丁文件? –

+0

確實補丁文件會顯示更改,但不會顯示衝突合併的結果?我的意思是我會看到原始文件(合併之前)和最終版本:我不會看到我修復的衝突。 – James

回答

1

使用的git diff --name-only --diff-filter=U的組合,其列出了未合併的衝突和cat文件:

您應該結束了的東西,如:

git diff --name-only --diff-filter=U | xargs cat 

而且有在文件中的一切,只是重定向輸出:

git diff --name-only --diff-filter=U | xargs cat > conflicts.diff 

或者只是將zip文件ES

git diff --name-only --diff-filter=U | xargs zip -r9 conflicts.zip 
1

你說的「出口...所有的衝突」的意思後,衝突中的所有文件的「貓」的文本文件?

  • 您的意思是衝突文件列表嗎?

    然後使用git status --short(簡潔)或只是git status,並將其輸出到管道(git status >/tmp/conflicts.txt)。

  • 你的意思是你的修補程序與你所做的工作來解決衝突?

    然後記錄一個或多個修改衝突的提交(可能在臨時分支上),然後使用git format-patch <base_commit>..<current_tip>

  • 你的意思是與嵌入衝突標記一樣的文件?

    然後從git status中識別這些文件,並從工作樹中複製它們。

+0

對,我需要得到第三種方法的結果。我想知道是否有更快的方法來做到這一點 – James

+0

@詹姆斯,恐怕不是因爲,說實話,你的需求似乎很不尋常。但不要害怕 - Git是高度可編寫腳本的。你可以編寫一個相當簡單的程序來調用'git status --porcelain'(Git版本之間的輸出保證是穩定的),解析它以檢測衝突的路徑,並且將它們輸出到它的標準輸出流,以便你可以做一些像'./print-conflicting-paths | xargs zip -r9/tmp /衝突。zip' – kostix

+0

@James,請查閱['git-status'](https://www.kernel.org/pub/software/scm/git/docs/git-status.html)手冊頁。實際上,它的'-z'命令行選項可能更適用於機器處理(但* *不包含POSIX shell,這對於'NUL'來說是非常糟糕的)。機器可讀的格式將被詳細解釋。 – kostix

2

你可以用這一個,以及:

git diff --name-only --diff-filter=U | xargs awk '/<<<<< HEAD/,/>>>>>>/'

這減少了衝突,從文件(提供衝突地區開始在>>>>>><<<<< HEAD和結束),所以你可以把它們扔掉到一個新的文件 - 如果原始文件是巨大的,你只需要顯示衝突便利。

+0

正是我所需要的 - 編輯你的文章 - 希望你不介意:) –