У вас есть четыре способа: с помощью команды merge
с --no-commit
флагом, используя revert
после того, как merge
, селективное rebase
или используя cherry-pick
.
Слияние с помощью --no-commit
, вероятно, является лучшим для ведения истории вокруг, но это будет больше работы, так как вам придется вручную отменить изменения перед фиксацией.
Другой вариант - merge
, затем выборочно revert
изменяется с использованием git revert
. Тем не менее, это сделает историю более беспощадной.
Если вы не заботитесь о том, чтобы история была «чистой», вы можете просто использовать rebase
, но это работает безопасно, если вы еще не нажали свои изменения на общее репо (если вы работаете с другими) или вы делаете переустановку из ветви выброса. Вы бы сделать что-то вроде этого:
git rebase --interactive master 1.3.6
Это будет rebase
ваши изменения на мастер из 1.3.6
, но сначала позволит вам выбрать обязуется хранить, редактировать, или игнорировать. Я уверен, что он удалит любую ветку, из которой вы делаете rebase
, поэтому вы должны, вероятно, сделать еще один отброшенный филиал там же, где 1.3.6
перед вами rebase
, а затем сделать master
, указывая на то же фиксацию, что и отбрасывающая ветвь, затем наконец, удалите ветку выброса.
Использование cherry-pick
позволяет выборочно объединять фиксации, но без явного запоминания обоих родителей. Если ветка 1.3.6
хранится в исходном репо, это не очень большая сделка, поскольку у вас нет обоих родителей слияния, поскольку у вас все еще есть история где-то, и cherry-pick
может автоматически ссылаться на номер фиксации в описании. Это создает нечистую историю, как выборочный rebase
.
В конце концов, это зависит от того, держите ли вы вокруг ветки 1.3.6
и как вы хотите, чтобы ваша история в конечном итоге выглядела.
Звучит как работа для 'cherry-pick'. – isherwood
Спасибо @isherwood –