Подтвердить что ты не робот

Работает ли 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: все, что я хочу сделать, это получить журнал одной ветки или другой, без необходимости делать чек сначала.

4b9b3361

Ответ 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