2016-08-31 2 views
1

У меня есть ветвь dev, и я хочу увидеть разницу между «конструкцией ветвей» и теперь. На самом деле меня больше интересует коммит, который последовал за созданием ветки, которая больше похожа на «создание ветки» +1.Какова стенография «создания ветки»?

Я знаю, что я могу использовать сокращенно, как HEAD и HEAD ~ 1 в командах Git. Я не знаю, как указать «создание ветки».

Что такое сокращение Git для «создания ветвей» и «создания ветки» +1?

+3

Git не записывает создание ветки, в общем. В некоторых конкретных случаях вы можете найти идентификатор фиксации в рефлоге. Помните, что касается Git, ветви по существу не имеют значения: только * совершает * действительно имеет значение. Если вы хотите, чтобы система вечно вела ветви, вы не хотите Git. Если у вас все в порядке, «только фиксирует вопрос», записывайте специальные коммиты, используя теги. – torek

+0

@torek Я предполагаю, что он означает ближайшую точку пересечения с какой-то другой ветвью. (если это так, [см. здесь] (http://stackoverflow.com/questions/1549146/find-common-ancestor-of-two-branches)) –

+0

git log master..branch --oneline | tail -1, Прочтите этот http://stackoverflow.com/a/32870852/1270865 – cafebabe1991

ответ

1

Вы не можете видеть, как была создана ветка. Эта информация не сохраняется. Филиал указывает на фиксацию прямо сейчас, и это в значительной степени. Это очень легкий объект и очень легко установить на какой-то другой фиксатор, потеряв историю ветки с момента создания.

+0

Я должен был знать, что не было «ХВОСТ» или подобного, учитывая, насколько плохо работает Git с протоколированием и поддержкой ветвей. Я попытался удалить вопрос, но было слишком поздно (уже были ответы).Я постоянно удивляюсь склонности Гита, чтобы выполнить простую задачу и сделать ее трудно невозможной. – jww

0

Вы можете использовать команду следующим образом.

git diff topic...master 

Это означает Changes that occurred on the master branch since when the topic branch was started off it

Цитируется помощь git diff

git diff [--options] <commit>...<commit> [--] [<path>...] 
     This form is to view the changes on the branch containing and up to 
     the second <commit>, starting at a common ancestor of both <commit>. 
     "git diff A...B" is equivalent to 
     "git diff $(git-merge-base A B) B". You can omit any one of 
     <commit>, which has the same effect as using HEAD instead. 

Кроме того, вы можете увидеть Find the parent branch of a git branch том, как найти родительскую ветку.

+1

Это работает с базой * слияния *, которая после слияния не имеет ничего общего с созданием ветви. Это может быть * то, что желательно в конце концов (это гораздо более полезно, например), но это не то, о чем просили. Другие (не-Git) VCS могут предоставлять и предоставлять то, что было предложено, хотя и по цене. – torek

1

Существует фундаментальная проблема с вашим вопросом: что такое «создание ветвей»? «Ветвь» - это просто указатель на фиксацию, которая сама имеет ссылку на родительский фиксатор, который имеет ссылку на родительский фиксатор и т. Д. Назад во времени.

Если я рисую свою историю GIT так:

a -> b -> c -> d (master) 
     \ 
     -> x -> y (devbranch) 

Тогда вы могли бы сказать, что ответ очевиден. Но дело в том, что история также может быть составлена ​​так:

a -> b -> x -> y (devbranch) 
    \ 
     -> c -> d 

Это то же самое. Нет конкретного «создания» ветки; это всего лишь метка, наложенная на кончик цепочки коммитов.

Вы мог быть в состоянии получить ответ, который вы ищете с помощью команды merge-base, что-то вроде:

git checkout devbranch 
git merge-base master HEAD 

Это будет найти «лучший общий предок (ов) между двумя фиксациями использовать в трехстороннем слиянии ", что в простых случаях, вероятно, будет точкой, в которой две ветви расходятся.

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