ключи - git убрать файл из отслеживания




git diff показывает только, что ревизия/ветвь A впереди ревизии/ветвь B (4)

Ваш вопрос немного неясен, потому что я не уверен, хотите ли вы увидеть diff / patch изменений между master и feature или просто хотите увидеть, какие ветви содержат, которые фиксируют то, что другая ветка не имеет.

Предполагая, что вы просто хотите увидеть, какие коммиты находятся в вашей ветви feature которые не существуют в master (т. Е. Кто совершает feature , «впереди» master ), вы можете сделать

$ git log --oneline --graph master..feature

Если вы хотите увидеть, как разделены как master и feature , вы можете использовать эту команду:

$ git log --oneline --graph --first-parent \
--decorate --left-right master...feature
> 5bef654 (feature) A ...
> f7c65ea B ...
> fc66245 C ...
> 7435fc0 D ...
< bf68204 (master) X ...
< 0c10ed1 Y ...
< 27bb774 Z ...

Вышеприведенный вывод показывает фиксации в master , которые не находятся в feature с < перед ними (поскольку вы использовали master...feature с мастером слева < сторона команды), в то время как feature фиксации, не находящаяся в главном, отмечен значком > поскольку вы использовали feature с правой стороны master...feature Тройные точки ... в этой форме важны, не оставляйте их.

Вы можете узнать больше об указании диапазона фиксации из книги Pro Git .

Иногда у меня возникает следующая проблема:

  1. Добавьте некоторые коммиты в ветви функции.

  2. Обновить мастер из восходящего потока.

  3. Хотите увидеть разницу между ветвью функций и мастером, но мастер git diff master показывает все вещи, которые были добавлены / удалены в master, когда я действительно хочу видеть только, что ветвь функции опережает master, а не что он позади.

Есть ли способ сделать это, не объединяя мастер в ветку функций?


Если я правильно понял ваш вопрос, ваша ветка функций отключена от основной ветви, и вы хотите увидеть различия между тем, что вы совершили в ветви функции, и тем, как выглядела главная ветка, когда вы разветвлялись от нее.

A----B----C
 \
  D----E----F

В этом случае вы можете использовать команду git diff с соответствующими хэшами коммитов. Таким образом, для ветви признака, которая разветвляется в точке A и впоследствии совершает D, E и F, вы можете сделать это:

git diff <hash of commit F> <hash of commit A>

Вы можете использовать git merge-base feature master чтобы увидеть хэш точки A, чтобы использовать выше, и git log чтобы увидеть хэш для вашего последнего фиксации F в ветви функции. Или для этого в одной строке используйте эту команду:

git diff feature `git merge-base feature master`


Я обычно хожу

git log -p feature-branch --not master

Но если вы хотите разницу, вы ищете

git diff <common-ancestor> master

где <common-ancestor> является общим предком вашей ветви функций и мастером, с которой вы хотите сравнить. Вы можете использовать merge-base чтобы найти это для вас.

git diff `git merge-base feature-branch master` feature-branch




git