Я думаю, вы ищете термин «вишенка». То есть возьмите одну фиксацию из середины одной ветки и добавьте ее в другую:
A-----B------C
\
\
D
становится
A-----B------C
\
\
D-----C'
Это, конечно, можно сделать с помощью команды git cherry-pick.
Проблема с этим коммитом в том, что git считает, что коммиты включают всю предшествующую им историю - таким образом, если у вас есть три таких коммита:
A-----B-----C
И попробуйте избавиться от B, вам нужно создать совершенно новый коммит, например:
A-----------C'
Где C 'имеет другой идентификатор SHA-1. Точно так же Cherry выбор фиксации из одной ветки в другую в основном включает создание патча, а затем его применение, что также приводит к потере истории.
Это изменение идентификаторов коммитов, помимо прочего, нарушает функциональность слияния git (хотя при умеренном использовании есть эвристика, которая устранит это). Что еще более важно, он игнорирует функциональные зависимости - если C действительно использовал функцию, определенную в B, вы никогда не узнаете.
Возможно, лучший способ справиться с этим - иметь более мелкозернистые ветви. То есть, вместо того, чтобы просто иметь 'master', иметь 'featureA', 'bugfixB' и т. Д. Выполняйте проверку кода для всей ветки за раз - где каждая ветка очень сосредоточена на выполнении только одной задачи - а затем объедините это одна ветка, когда вы закончите. Это рабочий процесс, для которого предназначен git, и в чем он хорош :)
Если вы настаиваете на работе с вещами на уровне патчей, вы можете посмотреть на darcs - он рассматривает репозиторий как набор патчей, и, таким образом, выбор вишни становится фундаментальной операцией. Однако у этого есть свои проблемы, например, очень медленно :)
Изменить: Кроме того, я не уверен, что понимаю ваш второй вопрос о двух скриптах. Может быть, вы могли бы описать это более подробно, возможно, как отдельный вопрос, чтобы не запутаться?