Какая разница между "squash" и "fixup" в Git/Git Extension?

Я использовал Git Расширения какое-то время (это здорово!), но я не нашел простого ответа на следующее:

Иногда, при вводе сообщения фиксации, создайте опечатку. Мой друг показал мне, как исправить это следующим образом (в Git Extentions):

Щелкните правой кнопкой мыши фиксацию > Дополнительно > Фиксация фиксации

enter image description here

Затем я просто поставлю флажок "Изменить" и переписал свое сообщение и вуаля! Мое сообщение фиксации исправлено.

Однако этот другой вариант "Squash commit"... Я всегда задавался вопросом, что он делает?!

Мой вопрос:

Кто-нибудь просто объяснит мне, какая именно разница между Squash commit и фиксацией Fixup в Git/Git Extentions? Они выглядят как-то "похожие" на меня: enter image description hereenter image description here

Ответ 1

Я не знаю, что Git Extensions делает с ним конкретно, но Git rebase имеет возможность автоматически сквош или фиксацию компиляции с сквошем! или исправление! префиксы, соответственно:

   --autosquash, --no-autosquash
       When the commit log message begins with "squash! ..." (or "fixup!
       ..."), and there is a commit whose title begins with the same ...,
       automatically modify the todo list of rebase -i so that the commit
       marked for squashing comes right after the commit to be modified,
       and change the action of the moved commit from pick to squash (or
       fixup).

Разница между squash и fixup заключается в том, что во время rebase операция squash предложит вам объединить сообщения оригинала и squash commit, тогда как операция fixup сохранит исходное сообщение и отменит сообщение из фиксации fixup.

Ответ 2

Проще говоря, при перезаписании серии коммитов каждая фиксация, помеченная как squash, дает вам возможность использовать ее сообщение как часть сообщения о фиксации pick или reword.

Когда вы используете fixup, сообщение с этой фиксации отбрасывается.

Ответ 3

От git -rebase doc:

Если вы хотите сбросить две или более коммитов в одну, замените команду "выбрать" для второй и последующей фиксации с помощью "squash" или "fixup". Если у коммитов были разные авторы, сложенный фиксаж будет приписан автору первого коммита. Предлагаемое сообщение фиксации для сложенного коммита - это объединение сообщений фиксации первого коммита и тех, у кого есть команда "squash", но опускает сообщения фиксации коммитов с помощью команды "fixup".

Ответ 4

Я возился с расширениями git и не мог заставить его раздавить много коммитов в один. Для этого мне пришлось прибегнуть к командной строке и найти этот пост полезный

git rebase -i Head~2

Это интерактивная перезагрузка и обратите внимание на следующее:

  • ~ 2 здесь относится к количеству фиксаций, которые вы хотите задействовать в этой операции, включая текущую головку
  • Вам нужно отредактировать окно интерактивного редактирования подзадачи, оставьте первый элемент "pick" и замените последующие строки "squash". Инструкции в ссылке выше намного яснее, если это непрозрачно.