it-swarm.com.ru

Git diff между текущей веткой и мастером, но не включает в себя необработанные коммиты

Я хочу увидеть разницу всех изменений в ветке, которая еще не объединена с мастером.

Я старался:

git diff master
git diff branch..master
git diff branch...master

Однако в каждом из этих случаев diff содержит содержимое в master, которое еще не было объединено с моей веткой.

Есть ли способ провести различие между моей веткой и мастером, которое исключает изменения в мастере, которые еще не были объединены в мою ветку?

125
pillarOfLight
git diff `git merge-base master branch`..branch

База слияния - это точка, в которой branch отличается от master.

Git diff поддерживает специальный синтаксис для этого:

git diff master...branch

Вы не должны менять стороны, потому что тогда вы получите другую ветку. Вы хотите знать, что изменилось в branch, поскольку оно отличается от master, а не наоборот.

Слабо связанные:


Обратите внимание, что синтаксис .. и ... не имеет той же семантики, что и в других инструментах Git. Он отличается от значения, указанного в man gitrevisions.

Цитирование man git-diff :

  • git diff [--options] <commit> <commit> [--] [<path>…]

    Это для просмотра изменений между двумя произвольными <commit>.

  • git diff [--options] <commit>..<commit> [--] [<path>…]

    Это синоним предыдущей формы. Если <commit> на одной стороне опущен, это будет иметь тот же эффект, что и использование HEAD.

  • git diff [--options] <commit>...<commit> [--] [<path>…]

    Эта форма предназначена для просмотра изменений в ветви, содержащей и вплоть до второго <commit>, начиная с общего предка обоих <commit>. "git diff A...B" эквивалентен "git diff $(git-merge-base A B) B". Вы можете опустить любой из <commit>, который имеет тот же эффект, что и использование HEAD.

На всякий случай, если вы делаете что-то экзотическое, следует отметить, что все <commit> в приведенном выше описании, за исключением двух последних форм, использующих нотацию "..", могут быть любыми <tree>.

Более полный список способов написания <commit> см. В разделе "УКАЗАНИЕ ПЕРЕСМОТРОВ" в gitrevisions[7] . Однако "diff" означает сравнение двух конечных точек, а не диапазонов, и обозначения диапазонов ("<commit>..<commit>" и "<commit>...<commit>") не означают диапазон, определенный в разделе "SPECIFYING RANGES" в gitrevisions[7] ,.

169
Palec

Вот что сработало для меня:

git diff Origin/master...

Это показывает только изменения между моей текущей выбранной локальной веткой и удаленной главной веткой, и игнорирует все изменения в моей локальной ветке, которые произошли от коммитов слияния.

19
Jeshurun