В git, в чем разница между merge --squash и rebase?



Я новичок в Git и я пытаюсь понять разницу между сквош и перебазироваться. Насколько я понимаю, вы выполняете сквош при выполнении ребаза.

925   3  

3 ответов:

и git merge --squash и git rebase --interactive может произвести" раздавленный " коммит.
Но они служат разным целям.

произведет сжатую фиксацию в целевой ветви, не отмечая никаких отношений слияния.
(Примечание: он не производит фиксацию сразу: вам нужно дополнительное git commit -m "squash branch")
Это полезно, если вы хотите полностью выбросить исходную ветвь, перейдя от (схема взята из поэтому вопрос):

 git checkout stable

      X                   stable
     /                   
a---b---c---d---e---f---g tmp

to:

git merge --squash tmp
git commit -m "squash tmp"

      X-------------------G stable
     /                   
a---b---c---d---e---f---g tmp

и затем удалить tmp филиала.

воспроизводит некоторые или все ваши коммиты на новой базе, позволяя вам сквош (или совсем недавно "исправить", см. Это поэтому вопрос), идущих прямо:

git checkout tmp
git rebase -i stable

      stable
      X-------------------G tmp
     /                     
a---b

если вы решите раздавить все коммиты tmp (но, вопреки merge --squash, вы можете выбрать переиграйте одних, а других раздавите).

таким образом, различия:

  • merge не трогает исходную ветвь (tmp здесь) и создает один коммит, где вы хотите.
  • rebase позволяет перейти на той же ветке источника (все равно tmp) С:
    • новая база
    • более чистая история

Merge squash объединяет дерево (последовательность коммитов) в один коммит. То есть, это кабачки все изменения, внесенные в n коммиты в один коммит.

перебазирование-это повторное базирование, то есть выбор новой базы (родительской фиксации) для дерева. Возможно, ртутный термин для этого более ясен: они называют это трансплантацией, потому что это просто: выбор новой земли (родительская фиксация, корень) для дерева.

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

надеюсь, что это было ясно!

слияние коммитов: сохраняет все коммиты в вашей ветви и чередует их с коммитами на базовой ветвиenter image description here

слияние сквош: сохраняет изменения, но опускает отдельные коммиты из истории enter image description here

Rebase: это перемещает всю ветвь функции, чтобы начать на кончике главной ветви, эффективно включая все новые коммиты в master

enter image description here

больше на здесь

Comments

    Ничего не найдено.