Ответ 1
Из вашего вопроса должно быть довольно очевидно, что вы просто спрашиваете о различии между git merge
и git rebase
.
Итак, давайте предположим, что вы в общем случае - вы проделали какую-то работу в своей мастер-ветке, и вы вытащили из оригинала, что тоже проделало определенную работу. После извлечения все выглядит так:
- o - o - o - H - A - B - C (master)
\
P - Q - R (origin/master)
Если вы слились в этот момент (поведение по умолчанию для git pull), если нет конфликтов, вы получите следующее:
- o - o - o - H - A - B - C - X (master)
\ /
P - Q - R --- (origin/master)
Если, с другой стороны, вы сделали соответствующую перезагрузку, вы получите следующее:
- o - o - o - H - P - Q - R - A' - B' - C' (master)
|
(origin/master)
Содержимое вашего рабочего дерева должно быть одинаковым в обоих случаях; вы только что создали другую историю, ведущую к ней. Базовая перезапись перезаписывает вашу историю, заставляя ее выглядеть так, как если бы вы перенесли новую начальную ветвь оригинала (R
) вместо того, где вы первоначально взяли (H
). Вы никогда не должны использовать метод переадресации, если кто-то еще вытащил из вашей основной ветки.
Наконец, обратите внимание, что вы можете настроить git pull
для данной ветки для использования rebase вместо merge, установив параметр конфигурации branch.<name>.rebase
в true. Вы также можете сделать это одним нажатием, используя git pull --rebase
.