Инструмент Git diff для нескольких коммитов с коммитом другого - PullRequest
5 голосов
/ 08 марта 2012

У нас есть рабочий процесс, в котором исправленный код должен проверяться другими разработчиками. В простых случаях это можно сделать с помощью «git diff oldhash newhash> diff.txt» и загрузить его на нашу доску отзывов.

Но есть ли способ создать diff для нескольких коммитов и исключить коммиты, сделанные между ними кем-то другим. Например, я хочу создать diff для mine1 to mine4, но исключить коммит Джо:

mine4
mine3
joe's
mine2
mine1

Есть идеи, как это сделать в командной строке git или с помощью другого инструмента?

Коммиты, сделанные другими, влияют на файлы, отличные от моих коммитов, поэтому в данном случае речь идет об исключении изменений, сделанных другими.

Ответы [ 4 ]

5 голосов
/ 08 марта 2012

Этого можно добиться, создав новую ветку в сочетании с cherry-pick:

git checkout -b mine_diffs
git cherry-pick mine1
git cherry-pick mine2
git cherry-pick mine3
git cherry-pick mine4
git diff mine1_ mine4_

Когда закончите, просто удалите ветку.Обратите внимание, что хэши sha1 будут отличаться при дифференцировании, что и указывает mine1_ и mine4_.

4 голосов
/ 08 марта 2012

Я не совсем уверен, что вы подразумеваете под "над моим1 на мой4".Различия всегда попарные (кроме середины слияния);"git diff mine1 mine4" даст вам все изменения между этими двумя деревьями.В приведенном выше примере вы можете получить четыре отдельных патча: mine1-> mine2, mine2-> joes, joes-> mine3, mine3-> mine4.Если бы вы сделали mine1-> mine2, mine2-> mine3, mine3-> mine4, вы бы все равно «увидели» изменения Джо.

Возможно, что вы хотите (как предложил @OleksandrKravchuk) «разница в том, что одинбыло бы, если бы один из них выбрал изменения в mine2, mine3 и mine4 в ветку, которая началась с mine1 ".В этом случае вам придется сделать именно это: создать такую ​​ветвь, выбрать те изменения, которые нужно применить, а затем сгенерировать разность.

Вы можете довольно легко автоматизировать это, создав временную ветку и выполнив командупоследовательность "git cherry-pick" с пропуском коммитов, которые вы хотите пропустить.

3 голосов
/ 08 марта 2012

Хорошо, возможно, это не совсем так, но я бы создал новую ветку, удалил ненужные коммиты и сравнил две ветви.

1 голос
/ 08 марта 2012
  1. Просмотр пакета коммитов, так как один diff - плохой стиль: просмотр кода (если используется) должен работать на уровне одиночного коммита
  2. У вас не может быть "разреженных" различий
  3. Может быть, правильные инструменты будут правильным путем?Для Гита это Геррит
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...