Git инструмент diff для нескольких коммитов с другим фиксатором inbetween

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

Но есть ли способ создать diff для нескольких коммитов и исключить коммиты, сделанные между ними кем-то другим. Например, я хочу создать diff для my1 для my4, но исключить Joe commit:

mine4
mine3
joe's
mine2
mine1

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

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

Ответ 1

Вы могли бы достичь этого, создав новую ветку в сочетании с вишневым выбором:

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 будут отличаться, если они различаются, что указывает my1_ и my4_.

Ответ 2

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

Возможно, что вы хотите (как предложил @Александр Александрович Кравчук) "различие того, что было бы, если бы одна вишня выбрала изменения в моей2, моей3 и моей4 в ветку, которая начиналась с моей1". В этом случае вам нужно будет сделать именно это: создать такую ​​ветвь, выбрать эти изменения для применения, а затем сгенерировать diff.

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

Ответ 3

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

Ответ 4

  • Рассмотрение пакета коммитов, поскольку один diff - это плохой стиль: Codereview (если используется) должен работать на уровне одной фиксации
  • У вас не может быть "редких" различий
  • Возможно, правильные инструменты будут правильным? Для Git это Gerrit