2017-01-13 5 views
7

После того, как я выполнил слияние с моей веткой мастера из рабочей ветви с git, мне иногда нужно найти, чтобы найти последнюю фиксацию на master до того, как произошло слияние. Как мне это сделать?Как найти последнюю фиксацию git перед слиянием

+0

Вы можете попробовать 'git log -1', он даст информацию о последнем фиксации выбранной ветви. Аналогично, 'git log -2' будет содержать информацию о последних двух коммитов. – Abhi

+0

Также попробуйте использовать gitk для визуализации структуры и проверки любых командных скриптов, на случай, если они не получат правильную базу слияния (fork-point). –

ответ

3

Быстрый способ сделать это, чтобы ввести

git log --pretty=format:'%h : %s' --graph 

затем просто следовать вниз граф на правой стороне, пока не найдете точку слияния. Вы также можете сделать

git log --pretty=format:'%h : %s' --graph > temp.txt 

который помещает вывод в файл, temp.txt, что, который вы можете открыть в редакторе и использовать поисковый механизм для поиска текста, как слияния.

Этот подход полезен, чтобы ответить на многие другие вопросы о происхождении вашего последнего коммита так поставили

alias git_graph="git log --pretty=format:'%h : %s' --graph" 

.bash_profile в моем файле, так что я могу просто использовать `` `git_log``, чтобы увидеть эту информацию ,

+0

Почему не 'git log -1'? – mallaudin

+0

@mallaudin: Я считаю, что Obromios ссылается на ситуацию, когда слияние несколько или даже много коммитов * позади * кончика 'master'.То есть, 'git log -1' будет показывать только одно нечетное коммит. – torek

+0

Да. Это правда. Я думаю, что сейчас. – mallaudin

4

Быстрый способ определить, совершить после слияния произошедшей является использование reflog.

Предполагая, что последняя операция СВЕРШИВШИМСЯ произошло слияние, то:

git log [email protected]{1} -1 

[email protected]{1} относится к предыдущему ГОЛОВЫ до последней операции, так что вы можете обратиться его с помощью журнала и reflog.

git log покажет вам последовательность коммитов в текущей ветке, поэтому после слияния она всегда будет слиянием и прямо перед тем, как она будет совершена из объединенной ветки. git reflog показывает последовательность операций в вашем репозитории (например, merge, rebase). Как поясняется в документах:

Справочные журналы или «журнальные листы», запись, когда в локальном репозитории были обновлены советы ветвей и другие ссылки. Reflogs полезны в различных командах Git, чтобы указать старое значение ссылки.

+0

Когда я попробовал это, он дал последнему фиксацию на ветке, которая была объединена, а не последняя фиксация на хозяине до того, как ветка была объединена. – Obromios

+0

@Obromios, что показывает git reflog --oneline? какие операции в списке? Вы должны выбрать следующее перед слиянием (то есть если HEAD @ {0} - слияние, то HEAD @ {1}), я думаю, что слияние не было последней операцией, – 2oppin

3

Если вы уже сливали branch в master, вот один из способов найти слияния совершить:

# With the ancestry-path option, 'git rev-list branch..master' (or git log) 
# will only list commits which are parents of 'master' 
# *and* children of 'branch' 
# 
# If 'branch' was merged into 'master', the last commit in this list 
# is the merge commit : 
$ git rev-list --ancestry-path branch..master | tail -1 

состояние master перед слиянием это совершить первый родитель:

$ h=`git rev-list --ancestry-path branch..master | tail -1` 
$ git log $h^ 
+0

Я проверил это, и он работает, спасибо. Однако я буду принимать свой ответ, stackoverflow.com/a/41628915/1299362, поскольку он более полезен. Я мог видеть, как я использую ваш ответ, если слияние было длинным, длинным. – Obromios

Смежные вопросы