В чем разница между `-squash` и `-no-ff-no-commit`?

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

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

1 ответов


различия

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

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

enter image description here

--squash

если вы checkout master, а затем 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, вы получаете это:

enter image description here

скрывает микро-нарушает

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

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

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