Вопрос

Каков наилучший способ получить журнал коммитов в ветке с момента ее разветвления от текущей ветки?Мое решение на данный момент таково:

git log $(git merge-base HEAD branch)..branch

Документация для git-разница указывает на то , что git diff A...B эквивалентно git diff $(git-merge-base A B) B.С другой стороны, документация для git-rev-синтаксический анализ указывает на то , что r1...r2 определяется как r1 r2 --not $(git merge-base --all r1 r2).

Почему они отличаются друг от друга?Обратите внимание , что git diff HEAD...branch дает мне те различия, которые я хочу, но соответствующая команда git log дает мне больше, чем я хочу.

На картинках предположим, что это:

         x---y---z---branch
        /
---a---b---c---d---e---HEAD

Я хотел бы получить журнал, содержащий коммиты 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 cherry branch [newbranch]

делает именно то, о чем вы просите, когда вы находитесь в master филиал.

Я также очень люблю:

git diff --name-status branch [newbranch]

Это не совсем то, о чем вы спрашиваете, но все равно очень полезно в том же контексте.

То, что вы хотите увидеть, - это список исходящих коммитов.Вы можете сделать это с помощью

git log master..branchName 

или

git log master..branchName --oneline

Где я предполагаю, что "branchName" был создан как отслеживающая ветвь "master".

Аналогично, чтобы увидеть входящие изменения, вы можете использовать:

git log branchName..master

Это похоже на ответ, который я опубликовал на: Предварительный просмотр Git push

Перенесите эти функции в свой профиль Bash:

  • gbout - исходящая ветвь git
  • входящая ветка gbin - git

Вы можете использовать это как:

  • Если на главном:ветвь gbin1 <-- это покажет вам, что находится в branch1 и чего нет в master
  • Если на главном:gbout ветвь1 <-- это покажет вам, что есть в master, чего нет в ветке 1

Это будет работать с любой веткой.

function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}

function gbin {
    echo branch \($1\) has these commits and \($(parse_git_branch)\) does not
    git log ..$1 --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}

function gbout {
    echo branch \($(parse_git_branch)\) has these commits and \($1\) does not
    git log $1.. --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}

Похоже на несколько ответов, таких как Alex V и NDavis, но ни один из них не совсем одинаковый.

Когда вы уже находитесь в рассматриваемой отрасли

Используя:

git diff master...

Который сочетает в себе несколько особенностей:

  • это очень коротко
  • показывает фактические изменения

Обновить:

Вероятно, это должно быть git diff master, но также это показывает разницу, а не коммиты, как указано в вопросе.

Добавьте туда a -p, чтобы увидеть некоторые ИЗМЕНЕНИЯ В ФАЙЛЕ

git log -p master..branch

Придумайте несколько псевдонимов:

alias gbc="git branch --no-color | sed -e '/^[^\*]/d' -e 's/* \\(.*\\)/\1/'"

alias gbl='git log -p master..\`gbc\`'

Просмотр уникальных коммитов ветки:

gbl

Чтобы просмотреть журнал текущей ветви с момента разветвления master:

git log master...

Если вы в данный момент находитесь на master, чтобы просмотреть журнал другой ветки с тех пор, как она ответвилась от master:

git log ...other-branch

git log --cherry-mark --oneline from_branch...to_branch

(3dots) но иногда он показывает "+" вместо "="

Я нашел

git diff <branch_with_changes> <branch_to_compare_to>

более полезно, поскольку вы получаете не только сообщения о фиксации, но и весь diff в целом.Если вы уже находитесь в ветке, в которой хотите увидеть изменения, и (например) хотите посмотреть, что изменилось в главном, вы можете использовать:

git diff HEAD master
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top