git rebase Как это работает - куда дозаписываются коммиты
Primary tabs
Коммиты из "вливаемой" ветке при rebase записываются перед коммитами текущей ветки.
Практика
Посмотрим на практике:
- Создадим тестовый репоизторий с двумя ветками
- Переключимся на новую неосновную ветку:
git checkout newbranch
- Посмотрим ее список коммитов:
git log --oneline --name-only
Получим:
4ac039a (HEAD -> newbranch) newbranch cmt 1 somefile.txt a2ec666 master cmt 2 somefile.txt 6dd2199 master cmt 1 somefile.txt
-
Сделаем rebase:
git rebase master
И теперь уже история:
git log --oneline --name-only
покажет нам что коммит, сделанный в мастере позже последнего коммита текущей ветки, оказался перед ним:
019bc56 (HEAD -> newbranch) newbranch cmt 1
somefile.txt
4394661 (master) master cmt 3
somefile.txt
a2ec666 master cmt 2
somefile.txt
6dd2199 master cmt 1
somefile.txt
Готово! Репозиторий переведен в состояние, описанное в начале этой заметки.
ОБРАТИТЕ ВНИМАНИЕ: после ребейза хэш коммита newbranch cmt 1 изменился с
4ac039a на 019bc56 -- т.е. фактически это новый коммит.
-- это сильный минус подхода с rebase, из-за этого вы не сможете просто запушить ветку, если до ребейза она была зщапушена, вам придется:
- либо сначала делать пулл - получая двойной набор коммитов.
- либо затирать историю ветки во внешнем репоизтории форсированным пушем
- Log in to post comments
- 1600 reads