Git Pull против Git Rebase

126

Я нуб в Git, и пытаясь понять разницу между git pullпротив git rebase. Может ли кто-нибудь привести пример, когда использовать этот вариант, поскольку я считаю, что оба служат одной цели.

user4943236
источник
Да, я сделал. Разница между pull и rebase в том, что pull выполняет слияние. Итак, ответ на ваш вопрос находится по ссылке, которую я вставил.
Thibault D.
1
@ user4943236 1) вы даже не знаете, кто проголосовал против вашего вопроса, не обвиняйте людей без причины 2) если бы это был мой голос против, я бы не удалял его просто потому, что на него так легко найти ответ, прочитав документация
Тим
1
Возможный дубликат В чем разница между git merge и git rebase?
SiGe
Отвечает ли это на ваш вопрос? git pull VS git fetch Vs git
rebase

Ответы:

130

git pullи git rebaseне взаимозаменяемы, но тесно связаны.

git pullизвлекает последние изменения текущей ветки с удаленного устройства и применяет эти изменения к вашей локальной копии ветки. Обычно это делается путем слияния, т. Е. Локальные изменения объединяются с удаленными изменениями. Так git pullпохоже на git fetch & git merge.

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

Вы можете использовать rebase вместо merge ( git pull --rebase). Внесенные вами локальные изменения будут перебазированы поверх удаленных изменений, а не будут объединены с удаленными изменениями.

У Atlassian есть отличная документация по объединению и перемещению .

Питер
источник
51

git-pull - получить и интегрировать с другим репозиторием или локальной веткой GIT PULL

В основном вы перетаскиваете удаленную ветку на свой локальный, например:

git pull origin master

Перетащит основную ветку в ваш локальный репозиторий

git-rebase - локальный прямой порт фиксируется в обновленном заголовке восходящего потока GIT REBASE

Это помещает ваши локальные изменения поверх изменений, сделанных удаленно другими пользователями. Например:

  • Вы внесли некоторые изменения в свою локальную ветку, например, под названием SOME-FEATURE
  • Ваш друг тем временем работал над другими функциями и объединил свою ветку в master

Теперь вы хотите увидеть его и свои изменения в своем локальном филиале. Итак, вы выполняете кассовую masterветку:

git checkout master

тогда вы можете тянуть:

git pull origin master

а затем вы переходите в свою ветку:

git checkout SOME-FEATURE

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

git rebase master

Надеюсь, теперь вам стало понятнее.

Tomasz
источник
15
Мастер оформления заказа не требуется. Оставайтесь на своей ветке и делайте: git fetchзатем git rebase origin/master.
Антуан Мартин
1
Проверяя локальный мастер, а затем извлекая исходный мастер, также обновит ваш локальный мастер. Это одна из лучших практик, которую следует использовать
Ашвани
21

В двух словах :

-> Git Merge: он просто объединит ваши и удаленные изменения, и это создаст еще одну запись истории фиксации

-> Git Rebase: он поместит ваши изменения выше всех новых удаленных изменений и перезапишет историю фиксации, поэтому ваша история фиксации будет намного чище, чем git merge. Rebase - это деструктивная операция. Это означает, что если вы не примените его правильно, вы можете потерять выполненную работу и / или нарушить целостность репозиториев других разработчиков.

Саурин Вала
источник