Як змусити батьків здійснити злиття в git?


140

Деякі команди git приймають батьківську версію; інші (наприклад git revert), як батьківський номер. Як отримати батьків в обох випадках. Я не хочу використовувати команду графічного журналу, тому що часто потрібно прокручувати довге дерево, щоб знайти другого батька.

Відповіді:


179

Простий git log <hash>заклик до злиття показує скорочені хеши своїх батьків:

 $ git log -1 395f65d
 commit 395f65d438b13fb1fded88a330dc06c3b0951046
 Merge: 9901923 d28790d
 ...

git виводить батьків відповідно до їх кількості: перший (крайній лівий) хеш - для першого батька тощо.

Якщо все, що вам потрібно, це лише хеші, два рівноцінні варіанти:

$ git log --pretty=%P -n 1 <commit>
$ git show -s --pretty=%P <commit>

git rev-list може також показати хеші батьків, хоча спочатку буде перераховано хеш для зобов'язання:

$ git rev-list --parents -n 1 <commit>

Якщо ви хочете , щоб досліджувати батьків, ви можете звернутися до них безпосередньо каратах , як <commit>^1і <commit>^2, наприклад:

git show <commit>^1

Це справді узагальнює; для злиття восьминога ви можете звернутися до n- го батька як <commit>^n. Ви можете звернутися до всіх батьків <commit>^@, хоча це не спрацьовує, коли потрібна одна фіксація. Додаткові суфікси можуть з’являтися після n- го батьківського синтаксису (наприклад <commit>^2^, <commit>^2^@), тоді як вони не можуть бути після ^@( <commit>^@^недійсні). Більше про цей синтаксис читайте на rev-parseсторінці man.


1
Відповідаючи на власне запитання: результати 'git rev-list --parents -n 1 <somehash>' є: <somehash> <parent1> <parent2>. Тобто, батьки мають одну кількість.
mikemaccana

Ви також можете використовувати git-батьків github.com/danielribeiro/dotfiles/blob/master/bin/git-parents . Просто покладіть його у свою ПАТУ та зателефонуйте $ git батьків <commit> (<commit> за замовчуванням для HEAD)
Даніель Рібейро

@jefromi, мені дуже хочеться, щоб частина "Також зауважила, що нормальний вихід журналу показує ..." частина буде вгорі вашої відповіді. :)
Адам Монсен

3
git logі git showвиводити дуже різні речі, коли є лише один з батьків. Віддайте перевагу, git logякщо хочете консистенції.
Ноель Яп

Ця відповідь не працює на моїй машині Ubuntu git (v2.17.1). Я не бачу Mergeфайл у git log -1виході.
mja

29

Далі йде найпростіший спосіб, який я знайшов для того, щоб побачити батьків злиття

git show --pretty=raw 3706454

14
git cat-file -p 3706454 те саме, але ще коротше :)
сабгентон

1
І те й інше дуже корисно!
горіх

Ще один варіантgit log --pretty=raw -1 3706454
selalerer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.