Вытяните все фиксации от ответвления, продвиньте указанный, соглашается на другого

Возможно, вы сможете лучше понять Префикс / постфикс с этим примером.

public class TestPrefixPostFix 
{
    public static void main (String[] args)
    { 
        int x=10;
        System.out.println( (x++ % 2 == 0)?"yes "+ x: " no "+x);
        x=10;
        System.out.println( (++x % 2 == 0)?"yes "+ x: " no "+x);
    }
}    
94
задан Sylvain 13 September 2013 в 18:12
поделиться

1 ответ

Я думаю, что вы ищете термин «выбор вишни». То есть возьмите одну фиксацию из середины одной ветки и добавьте ее в другую:

A-----B------C
 \
  \
   D

станет

A-----B------C
 \
  \
   D-----C'

Это, конечно, можно сделать с помощью команды git cherry-pick.

Проблема с этой фиксацией заключается в том, что git считает, что коммиты включают всю предшествующую им историю - таким образом, если у вас есть три таких коммита:

A-----B-----C

И попытайтесь избавиться от B, вы должны создать совершенно новый коммит, например так:

A-----------C'

Где C ' имеет другой идентификатор SHA-1. Точно так же выбор вишневого коммита из одной ветки в другую в основном включает в себя создание патча, а затем его применение, что также приводит к потере истории.

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

Возможно, лучший способ справиться с этим - иметь более мелкие ветки. То есть, вместо того, чтобы просто иметь 'master', иметь 'featureA', 'bugfixB' и т. Д. Выполняйте проверку кода для всей ветки за раз - где каждая ветка очень сосредоточена на выполнении только одной задачи - а затем объедините это одна ветка, когда вы закончите. Это рабочий процесс, для которого разработан git, и в чем он хорош:)

Если вы настаиваете на работе с вещами на уровне патчей, вы можете посмотреть на darcs - он считает, что репозиторий является набором патчи, и, таким образом, сбор вишни становится основной операцией. Однако у этого есть свой набор проблем, например, очень медленный :)

Edit: Также Я не уверен, что понимаю ваш второй вопрос о двух сценариях. Может быть, вы могли бы описать это более подробно, возможно, как отдельный вопрос, чтобы не запутаться?

294
ответ дан 24 November 2019 в 05:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: