Каков наилучший способ получить журнал коммитов на ветке с момента его ветвления от текущей ветки? Мое решение до сих пор:
git log $(git merge-base HEAD branch)..branch
Документация для git-diff указывает, что git diff A...B
эквивалентно git diff $(git-merge-base A B) B
. С другой стороны, документация для git-rev-parse указывает, что r1...r2
определяется как r1 r2 --not $(git merge-base --all r1 r2)
.
Почему они разные? Обратите внимание, что это git diff HEAD...branch
дает мне нужные мне различия, но соответствующая команда git log дает мне больше, чем я хочу.
В картинках предположим, что это:
х --- у --- --- г ветви / --- --- б --- с --- --- д е --- ГОЛОВКА
Я хотел бы получить журнал, содержащий коммиты x, y, z.
git diff HEAD...branch
дает эти коммиты- однако
git log HEAD...branch
дает x, y, z, c, d, e.
Ответы:
В контексте списка ревизий,
A...B
какgit-rev-parse
он определяется. git-log принимает список ревизий.git-diff
не принимает список ревизий - он принимает одну или две ревизии и определилA...B
синтаксис, чтобы обозначить, как он определен наgit-diff
странице руководства . Еслиgit-diff
явно не определитьA...B
, то этот синтаксис будет недействительным. Обратите внимание, чтоgit-rev-parse
справочная страница описанаA...B
в разделе «Указание диапазонов», и все в этом разделе допустимо только в ситуациях, когда допустим диапазон редакций (т. Е. Когда требуется список редакций).Чтобы получить журнал, содержащий только x, y и z, попробуйте
git log HEAD..branch
(две точки, а не три). Это идентичноgit log branch --not HEAD
и означает все коммиты на ветке, которые не находятся на HEAD.источник
git diff HEAD..branch
идентичнаgit diff HEAD branch
. Здесь нужно помнить, что log принимает список / диапазон ревизий, а diff - нет. Вот почему они по-разному относятся к своим аргам.git diff HEAD...branch
(три точки) соответствует выводуgit log HEAD..branch
делает именно то, что вы просите, когда вы находитесь в
master
филиале.Я также очень люблю:
Что не совсем то, что вы просите, но все же очень полезно в том же контексте.
источник
git cherry
это действительно очень полезно. Спасибо :)gif-diff
:,git diff x..z
или для моего собственного примера это такgit diff 13bc4d..8eda3a
.То, что вы хотите увидеть, это список исходящих коммитов. Вы можете сделать это используя
или
Где я предполагаю, что «branchName» был создан как отслеживание ветви «master».
Аналогично, для просмотра входящих изменений вы можете использовать:
источник
Это похоже на ответ, который я опубликовал: Предварительный просмотр Git push
Добавьте эти функции в свой профиль Bash:
Вы можете использовать это как:
Это будет работать с любой веткой.
источник
Похоже на несколько ответов, таких как Alex V's и NDavis, но ни один из них не совпадает.
Когда уже в ветке идет речь
С помощью:
Который сочетает в себе несколько функций:
Обновить:
Вероятно
git diff master
, так и должно быть , но также показывает diff, а не коммиты, как указано в вопросе.источник
git co master; git pull
создали ветвь с тех пор, выgit diff master
не будете использовать ее, чтобы вносить различия ТОЛЬКО в коммиты в указанной ветке.git diff <branch1>...<branch2>
покажет изменения, внесенныеbranch2
.Добавьте туда -p, чтобы увидеть некоторые изменения файла
Сделайте псевдонимы:
Смотрите уникальные коммиты ветви:
источник
Чтобы просмотреть журнал текущей ветви с момента отделения от мастера:
git log master...
Если вы в данный момент используете master, чтобы увидеть журнал другой ветви, так как она разветвляется от master:
git log ...other-branch
источник
(3 точки), но иногда он показывает «+» вместо «=»
источник
я нашел
более полезным, поскольку вы получаете не только сообщения коммита, но и весь diff. Если вы уже находитесь в ветке, в которой хотите увидеть изменения и (например) хотите увидеть, что изменилось в мастере, вы можете использовать:
источник