Возможно, вы сможете лучше понять Префикс / постфикс с этим примером.
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);
}
}
Я думаю, что вы ищете термин «выбор вишни». То есть возьмите одну фиксацию из середины одной ветки и добавьте ее в другую:
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: Также Я не уверен, что понимаю ваш второй вопрос о двух сценариях. Может быть, вы могли бы описать это более подробно, возможно, как отдельный вопрос, чтобы не запутаться?