2010-12-14 3 views
1

Если я использую gitk для просмотра объекта фиксации, он перечисляет под ветками (в нижней левой панели) все дочерние элементы этой ветви, к которым я могу перемещаться вверх (пока они не являются безымянными, но имеют имена ветвей) ,gitk show «будущие» ветки?

Почему? ИМХО это не логично и не полезно, потому что это нарушает хронологию событий (как thinsg попал в репозиторий).

Пусть у меня есть дерево, которое выглядит примерно так:

о ветви 'Left' (совершить 3)
| o ветвь «Право» (фиксация 2)
|/
o commit 1
|
о 'базовой' ветви

Теперь, если я выбираю совершить 1, а затем в разделе 'Филиалы:' Я вижу:
Отрасль: левый, правый
следующим образом: база

Что такое точка этого? Объект commit 1 является частью базовой ветви, он не является частью левой ветви или правой ветви, просто потому, что в то время, когда он был создан, Left и Right еще не существовали. Таким образом, все, что сливается или передается Left и Right LATER, будет частью Left или Right, NOT commit 1. Итак, как же ветви, которые совершают 1, являются частью Left и Right?

Кто-то пожалуйста, объясните, что мне не хватает здесь, потому что исходит от ClearCase фоне это не имеет смысла для меня вообще ...

Спасибо!

ответ

1

Благодаря этой информации вы знаете, что изменения, внесенные в выбранную фиксацию, включены во все ветви, фигурирующие там.

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

Иногда я хотел бы сделать обратное, выбрать фиксацию и посмотреть, применяется ли там еще одна предыдущая фиксация. Практически невозможно сделать это, насколько я знаю, поэтому выбор другой предыдущей фиксации и проверка поля «Филиалы» - хорошая замена.

+0

Прежде всего - спасибо за ответ. Хорошо, я вижу вашу точку зрения, но в этом случае, как я могу увидеть обратную информацию, то есть то, что является отправной точкой ветки? Другими словами - если я сливаю еще две коммиты (4 и 5) сверху слева, что говорит мне, что коммиты 3, 4 и 5 являются частью левой ветви? Да, я мог бы нарисовать это визуально, но что, если Branch Left не был создан до фиксации 4? Или, если он создан на том же уровне, что и commit 1 или base? – Alan

+0

@Alan: В случае, когда вы описываете, фиксации 3, 4 и 5 по-прежнему будут отображать Left как ветку, в которой они включены. Неважно, где он был создан, просто независимо от того, является ли данный коммит частью его истории. – Cascabel

+0

@ Алан: как говорит Джероми, действительно ли важно, где началась новая ветка? Независимо от того, существовала ли ветвь при создании коммита, не меняется тот факт, что фиксация является частью ее истории. В git ветви практически просто указывают на фиксации. Каждый фиксатор имеет указатель на его родительский элемент, который воссоздает историю. – Gauthier

0

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

В вашем примере commit1 не связан непосредственно с какой-либо отрасли, но предыдущий один остается на base и два восходящих коммиты находятся на Left и Right.

0

Вы смотрите на это немного неправильно. Конец commit1 не является частью основной ветки. В git ветви - это простые ссылки на объекты фиксации. История ветви затем описывается как «все коммиты достижимы». Таким образом, commit1 доступен как слева, так и справа, но недоступен из базы.

Если вы были с git checkout base && git checkout -b feature2, то ваша новая ветвь feature2 не будет включать commit1. Git не отслеживает создание ветви - если вы хотите записать, что вы можете добавить тег или использовать git mergebase Left Right, который скажет вам, что первая фиксация доступна из обеих ветвей (в данном случае commit1).

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