Первое, что нужно понять, это то, что способ, которым вы описываете желаемое поведение (слияние с целевой записью только 1 коммит), - это именно то, как работают слияния по умолчанию.
Причина, по которой может показаться иначе, состоит в том, что многие gitПо умолчанию команды следуют за всеми ветвями, которые входят в слияние. Вы можете изменить это, задав опцию --first-parent
команде
git log --first-parent
. Как обычные слияния, так и "слияния в сквош" записывают ровно один новый коммит и помещают его в целевую ветвь (т. Е. Ветвь, извлеченная привы даете команду).
Разница в том, что слияния сквоша делают вид, что не пишут слияние, то есть родительский элемент only нового коммита - это предыдущий совет целевой ветви. У обычного слияния есть 2-й родитель - независимо от того, в какую ветвь вы сливаете - и, как вы заметили, это необходимо, если вы хотите, чтобы последующее слияние работало правильно.
Вы можете перепрыгнуть через обручи, чтобы заново изобрести колесо. Например, eftshift0 дал вам возможность в любое время заставить dev
соответствовать кончику вашей другой ветви - что-то вроде слияния независимо от базы слияния, при условии, что нет нигде, кроме вашей ветви, которая когда-либо вносит вклад в dev
. И если вы будете искать SO, вы даже сможете найти более общие решения.
Но то, что объединяет все эти решения, заключается в том, что они работают вопреки принципам работы git. На самом деле намного проще использовать git по назначению - то есть просто объединить вашу ветку с dev, если вы хотите перенести эти изменения, и если вы хотите вывод, который не следует использованию боковой ветви first-parent
.