Страницы

Поиск по вопросам

среда, 22 мая 2019 г.

git не видит изменений в ветке

git не видит изменений в ветке, после git push origin remote_branch и сравнением с master не показывает изменений, хотя было сделано множество изменений в файле но сравнивая с мастером не выводит никаких различий.
Есть подозренее что эти изменения уже были закомичены на этой ветке и удалены, а теперь git не видит этого коммита и соответвенно его изменений.
Вот такая картина:
git checkout -b new_branch
git commit -m "some commits"
git push origin new_branch
git checkout -b my_new_branch_2
git pull origin new_branch
На этом моменте я получаю все коммиты которые были в ветке new_branch и удаляю некоторые изменения в файлах test.txt
git push origin my_new_branch_2
git checkout master git merge my_new_branch_2
Тут я смержился с мастером.
Теперь когда пытаемся сделать мерж с матером с ветки new_branch с которой я ранее сделал pull то говорит что нет изменений в файле test.txt


Ответ

Что такое "ветка"
Это просто указатель на какой-то коммит. Все коммиты организованы в граф, в котором у каждого коммита (кроме первого) есть предок. Так за один коммит можно вытащить целую цепочку — до самого первого. Все коммиты, которые вот так вытаскиваются, называют «коммитами в ветке X» или «принадлежащими ветке X».
Предположим, было так:
A - B - C master \ D new_branch
Что делает git checkout -b
Эта команда создаёт новую ветку, указывающую на тот же коммит, на который указывает текущая ветка:
git checkout -b my_new_branch_2
A - B - C master \ D new_branch, my_new_branch_2
То есть после выполнения этой команды ветки new_branch и my_new_branch_2 идентичны.
Что делает git pull origin имяветки
Команда git pull производит мерж ветки из удаленного репозитория в текущую ветку. Если замержить коммит, который уже принадлежит текущей ветке (т.е. доступен по цепочке предков), то слияние не произведёт изменений.
Если никто кроме вас не пушит в ветку new_branch, то она указывает на тот же коммит D, что и ветка my_new_branch_2, так что эта команда ничего не делает:
git pull origin new_branch
Мерж предка
Если после этого сделать ещё коммиты в my_new_branch_2, но не менять new_branch, то вторая фактически будет «частью» первой. Ветка new_branch указывает на коммит D, который является предком E, а следовательно принадлежит ветке my_new_branch_2
A - B - C master \ D new_branch \ E my_new_branch_2
Когда вы мержите my_new_branch_2 в master, в составе этой ветки приходят и коммиты ветки new_branch. Мерж скорее всего у вас происходит по модели "fast-forward" – когда указатель master просто перемещается вперёд на указатель my_new_branch_2
A - B - C - D new_branch \ E my_new_branch_2, master
Поэтому попытка повторно замержить new_branch в master не приносит результата.

Комментариев нет:

Отправить комментарий