2016-09-29 2 views
0

Предположим, у меня есть 2 ветки. Я хочу, чтобы одна ветка отслеживала другую ветку, начиная с определенной фиксации, так что, когда в отслеживаемой ветке есть новые коммиты, старые коммиты не объединены в ветку отслеживания.Отслеживание перехода джитта, начиная с определенного фиксации

Можно ли это сделать в git? Моя проблема заключается в том, что я не хочу иметь какие-то старые коммиты в новой ветке, но мне нужно автоматически получать новые коммиты из другой ветви, за исключением некоторых старых коммитов.

ответ

0

Имена филиалов - это всего лишь записи, хранящие идентификатор фиксации.

Что вы запрашиваете здесь, это сохранить определенный идентификатор фиксации под именем, а затем сравнить другую ветвь . Идентификатор фиксации в сохраненный идентификатор фиксации. Это именно те ветки и теги do: это имена для идентификаторов фиксации.

Единственное реальное различие между именем ветви и именем тега является то, что имя ветви предназначено для перемещения, и на самом деле перемещается автоматически, когда один «на» эту отрасли и делает фиксации:

 o--o  <-- branch1 
    /
...--o--o--o  <-- HEAD -> branch2 
     ^
      | 
      \-------- tag: tagX 

Здесь HEAD указывает на branch2, то есть вы находитесь на ветке branch2: вы сделали git checkout branch2 недавно.

Теперь, если вы сделаете новый фиксации (давайте отмечать этот с * вместо o), график становится:

 o--o  <-- branch1 
    /
...--o--o--o--* <-- HEAD -> branch2 
     ^
      | 
      \-------- tag: tagX 

Обратите внимание, как метка не перемещается.

Если мы используем имя ветви, а не имя тега, оно все еще не перемещается. Давайте перемотаем до новой фиксации и нарисуем это как:

 o--o  <-- branch1 
    /
...--o--o--o  <-- branchX, HEAD -> branch2 

Теперь мы создаем новую фиксацию. Потому что мы находимся на филиале branch2 и не на branchX, только branch2 изменений. Так что я нарисую это немного по-другому просто, чтобы соответствовать ветви стрелки:

 o--o  <-- branch1 
    /
...--o--o--o  <-- branchX 
      \ 
      * <-- HEAD -> branch2 

Обратите внимание, что это точно такой же граф как и тег-I've просто нарисован тега стрелка немного по-другому, что стрелка тега ближе к самой фиксации (поскольку теги никогда не должны меняться, а ветви -, которые должны меняться).

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

git branch branchX <commit-ID> 

или:

git tag tagX <commit-ID> 

Что вы должны использовать, тег или ветвь? Это зависит от того, хотите ли вы его перенести, и о том, хотите ли вы, чтобы другие люди делились им.Теги никогда не должны двигаться, и они довольно глобальны: другие люди, которые клонируют ваш репозиторий, получают теги, ваши теги. Филиалы являются Предполагается, что они перемещаются и не являются такими глобальными: другие люди, которые клонируют ваш репозиторий, получают ваши ветви, но как origin/* имена, а не как их названия филиалов.

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

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