Ответ 1
Вы можете использовать range.
git log master..
Если вы проверили свою ветку my_experiment
. Это будет сравнивать, где master
находится на HEAD
(кончик my_experiment
).
Скажем, я создал новую ветвь my_experiment
из master
и сделал несколько коммитов для my_experiment
. Если я делаю a git log
, когда на my_experiment
, я вижу, что фиксации сделаны в этой ветке, но также совершены записи, сделанные в master
, до того, как была создана ветвь my_experiments
.
Мне было бы очень полезно увидеть историю всех коммитов в ветке my_experiments
, пока она не ударит по созданию этой ветки - фактически это истинная история только этой ветки. В противном случае мне не ясно, просматривая журнал, были ли коммиты в ветке my_experiments
или нет.
Есть ли способ сделать это с помощью Git?
Вы можете использовать range.
git log master..
Если вы проверили свою ветку my_experiment
. Это будет сравнивать, где master
находится на HEAD
(кончик my_experiment
).
Команда git merge-base
может использоваться для поиска общего предка. Поэтому, если my_experiment еще не был объединен с мастером, и my_experlement был создан от мастера, вы могли:
git log --oneline `git merge-base my_experiment master`..my_experiment
Примечание: если вы ограничиваете этот журнал последним n commit (последние 3 совершают, например, git log -3), не забудьте поставить пробел между 'n' и вашей веткой:
git log -3 master..
До git 2.1 (август 2014 года) эта ошибка: git log -3master..
фактически покажет вам последние 3 фиксации текущей ветки (здесь my_experiment
), игнорируя предел master
(что означает, если my_experiment
содержит только одну фиксацию, 3 все равно будут перечислены, 2 из них из master
)
Смотрите совершить e3fa568 Junio C Hamano (gitster
):
git log -<count>
" более внимательноЭта запутанная командная строка просто игнорирует "
master
" и заканчивает тем, что показывает две коммиты из текущегоHEAD
:
$ git log -2master
потому что мы корнем "
2master
" доatoi()
, не убедившись, что вся строка анализируется как целое число.Вместо этого используйте вспомогательную функцию
strtol_i()
.
Я думаю, что вариант для ваших целей - git log --oneline --decorate
. Это позволяет узнать проверочную фиксацию, а верхняя - для каждой ветки, имеющейся в вашей строке сюжета. Делая это, у вас есть прекрасный взгляд на структуру вашего репо и коммиты, связанные с определенной ветвью. Я думаю, что чтение this могло бы помочь.
Вы можете использовать только git log --oneline
Я знаю, что очень поздно для этого... Но вот (не так просто) oneliner, чтобы получить то, что вы искали:
git show-branch --all 2>/dev/null | grep -E "\[$(git branch | grep -E '^\*' | awk '{ printf $2 }')" | tail -n+2 | sed -E "s/^[^\[]*?\[/[/"
git show-branch
(отправка предупреждений в /dev/null
).grep -E "\[$BRANCH_NAME"
.$BRANCH_NAME
получается с помощью git branch | grep -E '^\*' | awk '{ printf $2 }'
(ветвь со звездой, отраженная без этой звезды).tail -n+2
.[$BRANCH_NAME]
с sed -E "s/^[^\[]*?\[/[/"
.