Есть ли способ раздавить коммиты, которые имеют фиксацию слияния? Я могу раздавить, когда нет коммитов слияния, но я не знаю, как это сделать, когда он есть.
Как эти два коммита.
Почему мы объединяем master с функциональной веткой? Если цель состоит в том, чтобы получить другие объединенные исправления, почему бы не перебазировать? Теперь нет слияния и можно раздавить.
@matt, значит, вместо слияния я должен перебазировать, а затем раздавить, я прав?
Не знаю насчет "должен". Я просто не понимаю, зачем слияние, если цель состоит в том, чтобы стереть коммит слияния.
Можете ли вы описать, что вы подразумеваете под «сквошем» в вашем случае? возможно, нарисуйте окончательный график, который вы хотели бы видеть?
@LeGEC Я просто хочу, чтобы эти два коммита были одним коммитом
Вот хороший ответ: stackoverflow.com/a/32842174/341994 Рассказывает, как преобразовать фиксацию слияния в обычную фиксацию (как если бы вы изначально сделали merge --squash
), а затем вы можете продолжить сжатие с помощью интерактивной перебазировки или мягкий сброс. Но вы потеряете историю «слияния»; вы не можете раздавить фиксацию слияния, идея на самом деле не имеет смысла.
Хорошо, а у вас все еще есть коммит слияния от мастера? или фиксация отделена от мастера?
Здесь я построил график, подобный вашему, до слияния:
* bbcdb99 (HEAD -> feature) d
| * d568728 (master) c
| * 8714c7f b
|/
* f1aeb9a a
Теперь я объединяю мастер в функцию:
* 264fc6c (HEAD -> feature) Merge branch 'master' into feature
|\
| * d568728 (master) c
| * 8714c7f b
* | bbcdb99 d
|/
* f1aeb9a a
Что ж, если я хочу сузить функцию до одного коммита и стереть коммит слияния, то мне не следовало так объединяться. Я должен был сделать слияние сквоша! Однако не все потеряно. Я могу просто сбросить софт обратно на f1aeb9a и сделать новый коммит:
$ git reset --soft f1aeb9a
$ git commit -m"new commit"
Это дает это:
* e26b588 (HEAD -> feature) new commit
| * d568728 (master) c
| * 8714c7f b
|/
* f1aeb9a a
Теперь «новая фиксация» содержит все, что было сделано с функцией, включая результаты слияния с мастером. Но, конечно, мы потеряли фиксацию слияния.
Спасибо!! это то, что я искал.
Прохладный! Повторюсь, мы могли бы добраться сюда несколько более прямо, если бы исходный merge
был merge squash
. Тогда вы могли бы сделать сквош ветки с интерактивной перебазировкой, если хотите. Однако полезно знать, что reset --soft
плюс commit
— это форма сжатия. См. мое эссе о сожалении: stackoverflow.com/questions/3528245/… Это сожаление первого типа.
Как ты качаешься?