Может ли git показать только конкретно, какие коммиты были объединены в master? - PullRequest
2 голосов
/ 08 октября 2019

Когда у меня есть скользящая ветвь dev, а затем, как только я добираюсь до точки, где некоторая значительная работа была проделана и стабильна, и я объединяю ее с master, журнал git покажет весь журнал разработкипо прямой линии. Я могу только сказать, сколько коммитов существует между dev и master в настоящее время, но все предыдущие коммиты не различают, были ли они объединены в master или просто, так сказать, "пропущены".

Но могу ли я получить git, чтобы показать мне, при каких конкретно фиксациях dev был объединен в master, а какие коммиты были только прогрессом, достигнутым в dev, например что-то вроде этого:

* (HEAD -> dev)
* (master)
|\
| *
| *
|/
* ((here dev was merged into master))
|\
| *
| *
| *
|/
* init

Желательно в контексте --graph, поскольку это будет наиболее интуитивно понятный способ восприятия информации.


РЕДАКТИРОВАТЬ : более детально, надеюсь, делаетПрояснение вопроса.

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

Мой первый коммит в ветке dev - это хэш 0000002, следующий 0000003 и следующий 0000004.

В этот момент, если я объединю 0000004 с master, я хотел бы знать, что master прошел прямо от 0000001 до 0000004. Это то, что я имел в виду, когда master «пропустил» 0000002 и 0000003, как, например, когда-то это были активные состояния ветви master. (Извините, если для этой ситуации есть подходящая терминология, я не знаком с ней, но надеюсь, вы понимаете, о чем я).

В этой ситуации мой идеальный результат - увидеть моюgit log (в графическом режиме) как:

* 0000004 (HEAD -> master, dev)
|\
| * 0000003
| * 0000002
|/
* 0000001

Что git показывает мне, вместо этого в этом случае прямая линия, поэтому я бы не узнал, глядя на git log, что былокогда-либо точка, в которой одна ветвь была в коммите 0000002, а другая - нет (или что на тот момент было даже две ветки).

Так что git в настоящее время показывает этот сценарийкак это:

* 0000004 (HEAD -> master, dev)
* 0000003
* 0000002
* 0000001

Ответы [ 2 ]

2 голосов
/ 08 октября 2019

Основываясь на обновленном описании, вероятный виновник проблемы - ускоренное слияние https://git -scm.com / docs / git-merge

Если слияние ускоренной пересылки разрешено, коммит 000004 слияния просто не был создан, если на главном устройстве не было сделано никаких изменений. Основная ветка ref была только что перемещена в ветку dev, и история, которую вы надеетесь увидеть, просто не существует в вашем хранилище.

Если вам по какой-либо причине необходимо вести эту историю, вам нужно объединить мастер с отключенным ускоренным слиянием либо в самой команде объединения (флаг --no-ff), либо на уровне репо. В этом случае git log --graph действительно отобразит историю, как вы ожидаете, см. Пример выходных данных для примера репо.

$ git log --graph
*   commit 4990d96a77e12206481eaead37a4283a42e49c64 (HEAD -> master)
|\  Merge: 76ef670 7cf0f0e
| | Date:   Tue Oct 8 15:39:37 2019 +0400
| |
| |     Merge branch 'testbranch'
| |
| * commit 7cf0f0e3c6ffe899867991ab88e642b5d9b58b49 (testbranch)
|   Date:   Tue Oct 8 15:38:36 2019 +0400
|
|       Test change on the branch
|
* commit 76ef670aa946bd02eaefed210a8fdeb57d5fbfff
  Date:   Tue Oct 8 15:38:01 2019 +0400

      Initial commit
0 голосов
/ 08 октября 2019

Эта суть демонстрирует, как вы можете сделать это, используя git:

git log --graph --oneline master

Также взгляните на tig , который является отличным текстовым интерфейсом дляgit.

В этом случае ветвь master содержит другие коммиты, но разница с рекурсивным (без ускоренной пересылки) слиянием состоит в том, что оно содержит 2 родителя, а не 1:

$ git show f73dd5d
commit f73dd5d
Merge: bdc04c9 7f79a4d # 2 commits

«Действие» на master заключалось в создании коммита слияния f73dd5d на основе предыдущего коммита bdc04c9, но слияния с содержимым 7f79a4d.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...