Я бы предположил, что под squash
вы имеете в виду rebase
n, а затем их раздавите.
Итак, как я это вижу, здесьэто то, что предлагают различные подходы.
1. Использование reset
Когда вы используете сброс, вы перемещаете то, на что указывает HEAD
.
Сброс текущего HEAD в указанное состояние.
Первое, что сделает сброс, это переместит то, на что указывает HEAD
. Это не то же самое, что изменение самого HEAD
(что делает checkout);reset перемещает ветку, на которую указывает HEAD
. Это означает, что если для HEAD
установлена основная ветвь (т. Е. Вы в настоящее время находитесь в основной ветке), запуск git reset 9e5e6a4
начнется с установки мастер-точки на 9e5e6a4
.
С учетом трех параметров, которые вы можете передать команде --soft
--hard
--mixed
, вы можете полностью потерять работу или внести изменения в состояние "Changes to be committed"
.
Преимущество этого подхода в том, что он прост и быстр. Вы указываете git, куда хотите указать HEAD
, а остальные изменения (в данном случае все 3 фиксации) будут объединены в одно большое изменение. Затем совершите и нажмите. Довольно просто.
Недостатком этого является то, что он дает вам ограниченный контроль над вашим сквошем (потому что это цель операции, сквош). Вы не видите хэши коммитов, вы не видите 3 сообщений коммитов, вам не предоставляется возможность переупорядочивать их, перефразировать / фиксировать любые коммиты.
2. Использование rebase
ПРИМЕЧАНИЕ: Здесь я говорю об интерактивном rebase
, опять же с идеей правильной фиксации коммитов.
Когда вы rebase
интерактивно в git, вам предоставляется список всех коммитов, которые вы указали для rebase
. Они упорядочены, отформатированы, и под ними у вас есть набор команд, которые вы можете указать для каждого коммита. Поскольку мы заинтересованы в сдавливании, мы можем выбрать наш коммит для сквоша, а остальное мы можем пометить squash
.
. Это позволяет нам видеть коммитов. мы давимМы можем прочитать сообщения, которые они имеют, мы можем увидеть нашу историю. В этот момент мы можем сказать, что на самом деле мы хотим изменить их порядок или просто перефразировать сообщения. Git дает нам больше гибкости, чтобы иметь историю, которую мы хотим (хотя некоторые могут сказать вам, что изменение истории git - это плохо, и этот аргумент иногда имеет свои достоинства).
Но даже когда мы просто хотим раздавитьПосле всех коммитов git заставляет нас написать новое сообщение о коммите, и мы можем видеть все сообщений о коммитах из коммитов, которые мы хотим раздавить. Нет необходимости искать или запоминать предыдущие сообщения.
Недостатком этого подхода является то, что может быть сложнее использовать интерактивное меню git и что для выполнения squash
может потребоваться немного больше времени.
Лично я считаю, что обе стратегии работают, но он чувствует , как rebase
-ing, больше подходит для фиксации коммитов. Это зависит только от того, в какой ситуации вы находитесь. Если вы думаете, что вам лучше сбросить и повторно зафиксировать, тогда сделайте это. Но я думаю, что использование интерактивного rebase
может избавить вас от путаницы в вашей истории.
Редактировать Я не видел, чтобы комментарии правильно указывали на то, что сжатие не единственный способ отправить коммит на ваш пульт. Может быть, это самый простой и легкий способ:)