2013-04-03 4 views
0

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

Обратите внимание, что я не пытаюсь найти, какой из них является предком другого, я хочу знать, какой из них был выдвинут первым.

Я хочу получить его в хронологическом порядке в истории git, а не по дате фиксации. Любой метод приветствуется, но предпочтительным является прямой путь (я использую его непосредственно на эмуляторе терминала, а не на скрипте).


Я попытался с помощью git merge-base, как предложил @wRAR.

Во-первых, есть недостаток: git merge-base --is-ancestor не дает мне выход. Он выходит с 0 или 1 без вывода чего-либо в stdout. Его хорошо при написании сценария, но когда вручную, используя его непосредственно на моем терминале, я должен проверить статус выхода на дополнительном этапе (echo $? на bash, $LASTEXITCODE на PowerShell). Не нарушитель сделки, но создает небольшую стычку.

Но, во всяком случае, это не сработало.

Работы по следующему сценарию:

> git log --oneline --graph 
| * <SHA1 D> Fourth commit. 
| * <SHA1 C> Third commit. 
| * <SHA1 B> Second commit. 
| * <SHA1 A> First commit. 
> git merge-base --is-ancestor <SHA1 B> <SHA1 C> 
> echo $? 
0 
> git merge-base --is-ancestor <SHA1 C> <SHA1 B> 
> echo $? 
1 

Но не в этой (не делать то, что я намерен):

> git log --oneline --graph 
* <SHA1 D> Merged work. 
|\ 
| * <SHA1 C> Paul's first commit. 
* | <SHA1 B> John's second commit. 
|/ 
* <SHA1 A> John's first commit. 
> git merge-base --is-ancestor <SHA1 B> <SHA1 C> 
> echo $? 
1 
> git merge-base --is-ancestor <SHA1 C> <SHA1 B> 
1 
+0

Он работает по назначению: ни один из коммитов не является предком другого. – wRAR

+0

Если вы хотите использовать что-то другое, кроме естественной фиксации DAG, чтобы установить заказ фиксации, пожалуйста, проясните это. – wRAR

+0

@wRAR Добавлена ​​заметка, поясняющая, что я намерен. – talles

ответ

0

Вам нужно сравнить дату совершения обоих фиксаций. Это можно увидеть в git show (или в любой другой подходящей команде) с --format=fuller или с пользовательским форматом, включая поле даты фиксации.

0

Единственный заказ git знает о том, что определено отношениями предков. Время фиксации и т. Д. Зависит от часов (возможно, идущих с луной) машины, на которой совершается коммитация, может быть первоначальным моментом фиксации фиксации, которая была с тех пор изменена/отредактирована несколько раз и может даже быть полностью фальшивой.