Работает ли git log --branches?
Кажется, я не могу git log --branches
правильно фильтровать его вывод. Кажется, что Git игнорирует его.
Например, голова git log --graph --all --decorate
, печатает:
* commit 3ae0d17538f787bdde68f37f6644ffe9652d8dc1 (HEAD, feature/branch-ignore)
| Author: Chris Lewis <[email protected]>
| Date: Mon Mar 14 17:39:56 2011 -0700
|
| Ignore merge commits, as they're going to be duplicating events
|
* commit 770534e9d77acb03eaf842440c879aec1c5b5500
| Author: Chris Lewis <[email protected]>
| Date: Tue Mar 8 14:39:40 2011 -0800
|
| Removed another remote branch check
|
Скажем, я хочу отфильтровать master
, что должно означать, что эти коммиты игнорируются. Голова git log --graph --all --decorate --branches=master
, также:
* commit 3ae0d17538f787bdde68f37f6644ffe9652d8dc1 (HEAD, feature/branch-ignore)
| Author: Chris Lewis <[email protected]>
| Date: Mon Mar 14 17:39:56 2011 -0700
|
| Ignore merge commits, as they're going to be duplicating events
|
* commit 770534e9d77acb03eaf842440c879aec1c5b5500
| Author: Chris Lewis <[email protected]>
| Date: Tue Mar 8 14:39:40 2011 -0800
|
| Removed another remote branch check
|
Git, похоже, не фильтрует. Кажется, не имеет значения, передается ли --branches
с другими аргументами или нет. Моя версия Git git version 1.7.4.1
. Кто-нибудь знает, как успешно использовать эту команду?
EDIT: все, что я хочу сделать, это получить журнал одной ветки или другой, без необходимости делать чек сначала.
Ответы
Ответ 1
Во-первых, (другой) Адам прав, что нет смысла использовать --all
для этого: если вы хотите видеть только одну ветку, например, ваш вопрос, зачем спрашивать все ветки?
Во-вторых, как уже сказано в комментариях к другим ответам, вам не нужно --branches
; просто сделайте git log mybranch
.
В-третьих, я могу объяснить, почему git log --branches=mybranch
не работает. На странице git-log(1)
говорится:
--branches[=<pattern>]
Pretend as if all the refs in refs/heads are listed on
the command line as <commit>. If <pattern> is given,
limit branches to ones matching given shell glob. If
pattern lacks ?, *, or [, /* at the end is implied.
Последнее предложение является решающим моментом здесь. Если <pattern>
является просто mybranch
, тогда нет символа подмены, поэтому git-log
интерпретирует его так, как если бы вы набрали
git log --branches=mybranch/*
который ссылается только на ссылки под $repo/.git/refs/heads/mybranch/*
, то есть на ветки, начинающиеся с mybranch/
.
Существует грязный взломать, чтобы предотвратить принятие /*
:
git log --branches=[m]ybranch
но я не могу думать о какой-либо хорошей причине, почему вы хотели бы сделать это, а не просто набирать
git log mybranch
Ответ 2
Поскольку вы указали --all
, вы переопределите все спецификации ветки, которые вы сделали.
Ответ 3
Кто-нибудь знает, как успешно использовать эту команду?
EDIT: все, что я хочу сделать, это получить журнал одной ветки или другой, без необходимости делать чек сначала.
Чтобы визуализировать график фиксаций на всех ветвях и пультах, сделайте следующее:
$ git log --graph --branches=* --remotes=* --decorate
Используйте это с другими параметрами git-log
для управления подробностями, например. --oneline
, --name-status
и т.д.
Возможно, вам придется сначала получить удаленные изменения, чтобы их увидеть. Вы можете получить все удаленные изменения, не применяя их к вашей текущей ветке (-ам) следующим образом:
$ git fetch --all
Ответ 4
Скажем, ваша история выглядела так:
d -- e [refs/tags/release1]
/
a -- b -- c [refs/heads/master]
\
f -- g [refs/heads/dev1]
\
h [refs/heads/dev2]
Если вы выполняете git log --branches
, то тот же git log master dev1 dev2
, поэтому вы увидите фиксации a, b, c, f, g и h. Если вы сделали git log release1 --branches=dev*
, то это же как git log release1 dev1 dev2
. Вы увидите a, d, e, b, f, g и h, но не c.
Ответ 5
Объяснение --branches
git log <commit>
перечислены все коммиты, доступные из любого <commit>
, который вы перечисляете в командной строке.
-
--all
делает то же самое, но притворяется, что вы указали все ссылки ref в refs/
.
-
--branches[=<pattern>]
делает то же самое, но притворяется, что вы указали все ссылки в refs/heads
. Он также позволяет вам ограничить шаблоном шара. Если вы хотите получить шаблон шара, ?
, ,
или [
, то подразумевается /
в конце.
Примеры
git log topic1 topic2 topic3
означает список всех достижимых достижений от topic1
, topic2
или topic3
.
git log -all
означает список всех коммитов, доступных из любого из ссылок, которые выводятся из git show-ref
.
git log --branches="topic*"
означает список всех коммитов, доступных из любой ветки, которая начинается с префикса topic
.
Источники
https://schacon.github.io/git/git-log.html
https://schacon.github.io/git/git-rev-list.html