2012-06-15 4 views
8

Я объединил две ветви. У вас много конфликтов. Решил их всех. Теперь я не уверен, возможно, я ошибся во время разрешения конфликта. И я не вижу другого способа проверить, верно ли это - просто запустите слияние снова и проверьте конфликты один за другим.git получить конфликты из прошлого слияния без повторного слияния

Это означает, что мне нужно создать еще одну ветвь для хранения результатов моего слияния, не так ли?

Могу ли я его избежать? Может быть, можно получить все конфликтующие файлы со всеми этими <<<<<<, ======, >>>>>> откуда-то в git, без повторного слияния?

+0

Возможно, вам стоит принять один из ответов. – dotancohen

+0

Я не думаю, что ответы на самом деле отвечают на вопрос. Последующие слияния не должны показывать те же конфликты из предыдущих слияний. – e40

ответ

3

Если вы хотите посмотреть на то, что слияние вы можете сделать

git show <hash-of-merge-commit> 

Если вы хотите, чтобы повторить все слияние вы делаете

git checkout <branch-that-you-merged-to> 
git reset --hard <hash-of-the-commit-just-before-the-merge> 
git merge <branch-that-you-merged-in> 

Если вы хотите повторить слияние, а затем сравните второе слияние с первым слиянием (чтобы рассмотреть, было ли это лучше) вы можете сделать:

git checkout <branch-that-you-merged-to> 
git rev-parse HEAD 

Это дает s вы хэш текущей фиксации. Запишите это. Затем сделайте

git reset --hard <hash-of-the-commit-just-before-the-merge> 
git merge <branch-that-you-merged-in> 

Завершить слияние, то делают это, чтобы сравнить слияние

git difftool <hash-of-commit-noted-above> 

Если вы почувствовали, что первоначальное объединение было лучше, вы можете сделать

git reset --hard <hash-of-commit-noted-above> 
+0

Во время слияния вы можете поиграть с «git show: 1: file.txt», чтобы перейти к базе слияния, «: 2: file.txt», чтобы отобразить файл слияния, »: 3: file.txt ", чтобы показать файл слияния –

2

Да, тривиально. Прежде всего, вам нужно найти sha1 id слияния с использованием git log. Когда вы делаете следующее:

git checkout <sha1>^1 
git merge <sha1>^2 

вы будете в безголовом состоянии. ^n означает n-й родительский элемент фиксации. Таким образом, никаких ветвей не создается. Вы можете более точно разрешить конфликты, а затем

git diff HEAD..<sha1> 

, чтобы узнать, существуют ли какие-либо различия в разрешении конфликтов.

BTW, ветка в git просто удобное для человека имя для sha1 совершения, поэтому не бойтесь создавать их столько, сколько пожелаете.

PS: Если вы работаете в Windows, символ в командной строке является специальным, вам нужно удвоить его или процитировать аргументы командной строки.

Смежные вопросы