Я новичок в git, и я пытаюсь понять разницу между squash и rebase. Насколько я понимаю, вы выполняете сквош, когда делаете rebase.В git, в чем разница между слиянием --squash и rebase?
ответ
Оба git merge --squash
и git rebase --interactive
могут производить «раздавленное» совершение.
Но они служат для разных целей.
будет производить раздавленный совершить на ветке назначения, без маркировки каких-либо отношений слияния.
(Примечание: это не производит фиксацию сразу: вам нужно дополнительный git commit -m "squash branch"
)
Это полезно, если вы хотите, чтобы выбросить исходную ветвь полностью, переходя от (схем, взятых из SO question):
git checkout stable
X stable
/
a---b---c---d---e---f---g tmp
к:
git merge --squash tmp
git commit -m "squash tmp"
X-------------------G stable
/
a---b---c---d---e---f---g tmp
и затем удалить tmp
ветвь.
повторы некоторые или все ваши фиксаций на новой базе, что позволяет сквош (или совсем недавно «исправить», посмотреть SO question), идущие непосредственно:
git checkout tmp
git rebase -i stable
stable
X-------------------G tmp
/
a---b
Если вы выбрали сквош всех коммитов tmp
(но, вопреки merge --squash
, вы можете переиграть некоторых и раздавить других).
Так различия:
merge
не трогать источник ветви (tmp
здесь) и создает одну фиксацию, где вы хотите.rebase
позволяет идти на одной и той же исходной ветви (ещеtmp
) с:- новую базу
- уборщик история
'G' является' c-d-e-f-g' сжатым вместе? –
@Wayne: да, G в этих примерах представляет собой коммиты 'tmp', раздавленные вместе. – VonC
Разве данные в 'G' точно такие же, как в' g'? Значит ли это, что 'G' совпадает с' g', за исключением того, что у него другой родитель? –
Слияние сквоша объединяет дерево (последовательность коммитов) в единую фиксацию. То есть, это squash все изменения, сделанные в n совершает одно фиксирование.
Rebasing повторно базируется, то есть выбирает новую базу (parent commit) для дерева. Может быть, для них более ясный термин: они называют это трансплантацией, потому что это просто: выбирая новое основание (parent commit, root) для дерева.
При выполнении интерактивной переустановки вам предоставляется возможность либо раздавить, выбрать, отредактировать или пропустить коммиты, которые вы собираетесь переупаковать.
Надеюсь, что было ясно!
Когда мне нужно переустанавливать и когда я должен раздавить? –
@MartinThoma https://lwn.net/Articles/328436/ –
Merge обязуется: сохраняет все коммиттов в вашей ветке и перемежает их с фиксацией на базовой ветке
Merge Сквош: сохраняет изменения, но опускает лицо совершает из истории
Rebase: Это перемещает всю ветвь функции, чтобы начать на кончике главного отделения, эффективный учет всех новых фиксаций в мастер
Больше на here
- 1. В чем разница между git pull и rebase?
- 2. В чем разница между «git reset» и «git rebase»?
- 3. В чем разница между git pull и git fetch + rebase
- 4. В чем разница между rebase в git pull --rebase и git rebase <branchname>?
- 5. GIT: В чем разница между запросом Pull и слиянием?
- 6. Не git merge --squash действительно git rebase -squash?
- 7. разница между 'git svn rebase' и 'git rebase trunk'
- 8. git rebase эквивалент слияния --squash
- 9. Проблемы с Git - rebase/squash
- 10. Разница между git pull --rebase, git rebase и git merge
- 11. git rebase - в чем разница между 'edit' и 'reword'
- 12. git squash на месте перед слиянием
- 13. git - squash - rebase - главная история относится к
- 14. git rebase interactive: squash merge commites together
- 15. В чем разница между git pull, git fetch и git rebase?
- 16. В чем разница между хранилищем и слиянием в рубиновых хэшах?
- 17. Перепишите слияние слиянием в сражение слиянием
- 18. git pull --rebase vs git rebase: в чем опасность?
- 19. Разница между слиянием ветвей и слиянием Stream_to_stream в perforce
- 20. В чем разница между «слиянием прерываний» и «алгоритмом Нагле»?
- 21. Разница между git pull и git pull --rebase
- 22. Тонкая разница с git pull - rebase и git rebase?
- 23. Разница между `git rebase foo bar` и` git checkout bar; git rebase foo`?
- 24. Может ли Git конвертировать слияния в squash во время rebase?
- 25. неинтерактивный git squash/rebase все в текущие ветви головки
- 26. Git - squash all branch - одна команда squash
- 27. В чем разница между аргументами -m, -s и -X, переданными в git rebase?
- 28. В чем разница «git shell» и «git»
- 29. git rebase i vs git rebase --onto
- 30. есть ли разница между слиянием с разветвлением в git
Просто FYI: новый ** Rebase и Merge ** кнопка ведет себя по-разному для выполнения перебазирования над командной строкой! Принятый ответ относится к выполнению переустановки из командной строки. Из [здесь] (https://help.github.com/articles/about-pull-request-merges/#rebase-and-merge-your-pull-request-commits): _ Поведение переадресации и слияния на GitHub немного отклоняется от git rebase. Rebase и merge on GitHub всегда будет обновлять информацию коммиттера и создавать новые SHS-команды, тогда как git rebase вне GitHub не изменяет информацию коммиттера_ – GrayedFox