Для изменений, скрытых в коммитах слияния
Коммиты слияния автоматически скрывают свои изменения из вывода журнала Git. Как кирка, так и обратная вина не нашли изменений. Итак, нужная мне строка была добавлена, а затем удалена, и я хотел найти слияние, которое ее удалило. История файла git log -p -- path/fileтолько показала, что он был добавлен. Вот лучший способ найти его:
git log -p -U9999 -- path/file
Ищите изменения, затем ищите в обратном направлении «^ commit» - первый «^ commit» - это коммит, в котором файл последний раз содержал эту строку. Второй «^ commit» после того, как он исчез. Второй коммит может быть тем, который удалил его. -U9999Призван показать все содержимое файла (после каждый раз , когда файл был изменен), предполагая , что ваши файлы все не более 9999 строк.
Находит любые связанные слияния с помощью грубой силы (различие каждого возможного коммита слияния с его первым родителем, работает с тоннами коммитов)
git log --merges --pretty=format:"git diff %h^...%h | grep target_text" HEAD ^$(git merge-base A B) | sh -v 2>&1 | less
(Я пытался ограничить фильтр ревизий больше, но столкнулся с проблемами и не рекомендую это. Изменения добавления / удаления, которые я искал, были в разных ветках, которые были объединены в разное время, и A ... B не включал когда изменения фактически были объединены с основной линией.)
Покажите дерево Git с этими двумя коммитами (и удалена большая часть сложной истории Git):
git log --graph --oneline A B ^$(git merge-base A B)
(A - первый коммит выше, B - второй коммит выше)
Показать историю A и историю B минус история как A, так и B.
Альтернативная версия (кажется, показывает путь более линейно, чем обычное дерево истории Git - однако я предпочитаю обычное дерево истории git):
git log --graph --oneline A...B
Три, а не две точки - три точки означают «r1 r2 - not $ (git merge-base --all r1 r2). Это набор коммитов, которые доступны либо с одного из r1 (слева) или r2 (справа) сторона), но не от обоих. - источник: "Человек Гитревенс"
git log -S<string> /path/to/fileхочет , чтобы-cили-ccво время слияния (конфликты) также отображались удаления