Подтвердить что ты не робот

Каковы различия между `--squash` и` -no-ff -no-commit`?

Какой из них следует использовать для скрытия микрокоманд?

Является ли разница между git merge --squash и git merge --no-ff --no-commit отрицанием других родителей?

4b9b3361

Ответ 1

Различия

Эти параметры существуют для отдельных целей. Ваш репозиторий заканчивается по-другому.

Предположим, что ваш репозиторий выглядит так после того, как вы закончили разработку в ветке темы:

enter image description here


--squash

Если вы извлекаете мастер, а затем git merge --squash topic; git commit -m topic git merge --squash topic; git commit -m topic, вы получите это:

enter image description here


--no-ff --no-commit

Вместо этого, если вы делаете git merge --no-ff --no-commit; git commit -m topic git merge --no-ff --no-commit; git commit -m topic, вы получите это:

enter image description here

Сокрытие микрокоммитов

Если вы действительно хотите скрыть (я имею в виду удаление из вашего репозитория) свои --squash, используйте --squash. Потому что, как вы можете видеть на изображениях выше, вы на самом деле не скрываете свои микро-коммиты, если не сдавливаете. Более того, вы обычно не толкаете свои тематические ветки в мир. Темы веток для темы, чтобы стать зрелым.

Если вы хотите, чтобы в вашей истории были все ваши микро-коммиты, но оставьте их в другой линии разработки (зеленая линия на изображениях выше), используйте --no-ff --no-commit. Но, пожалуйста, помните, что а) это не ветка, и б) ничего не значит в Git, потому что это просто еще один родитель вашего коммита.

Пожалуйста, обратитесь к Git Branching - Что такое ветка, если вы действительно хотите понять.