Проблема с перемещением git из удаленной ветки - PullRequest
1 голос
/ 21 июня 2020

Я работаю над большим проектом с миллионами строк кода, и однажды я вставил фиксацию в my_branch. Позже я внес дополнительные изменения и отправил коммит через веб-интерфейс (если быть точным, GitLab UI). Теперь я хочу перенести изменения из my_branch в мой локальный env.

Если я запустил git pull --rebase origin my_branch, это вызовет у меня множество конфликтов перебазирования и приведет к файлам, которые я никогда не касался. Понятия не имею, как их объединить и таким образом разрешить все конфликты ... Я уверен, что никто больше туда ничего не пихнул.

Как выйти из этой ситуации? Что я здесь делаю не так?

Заранее спасибо!

Ответы [ 4 ]

2 голосов
/ 21 июня 2020

Одно из возможных решений (и более безопасное) - переименовать локальную ветку (и отключить ее восходящую ветку), затем получить удаленную и после этого локально объединить одну ветку в другую.

0 голосов
/ 21 июня 2020

У вас возникают конфликты в файлах, которые вы не трогали, но есть в других. Ребазинг повторно объединяет ваши локальные коммиты с удаленной веткой. Любые объединенные вами изменения необходимо снова объединить. Если у вас много локальных коммитов, и вы не делаете их sh, они со временем накапливаются. Ребазинг становится все труднее и сложнее.

Если у вас есть более длительная задача, создайте новую ветку из my_branch. Делайте обычные слияния вместо ребазинга. Это избавляет вас от необходимости повторять одни и те же изменения снова и снова. Когда придет время объединить вашу личную ветку обратно в my_branch, используйте squa sh -merge, чтобы сохранить историю фиксации в чистоте:

git checkout my_branch
git pull
git checkout -b your_branch
git commit
git commit
git fetch
git merge origin/my_branch
git commit
git checkout my_branch
git pull
git merge --squash your_branch
git push origin HEAD
0 голосов
/ 21 июня 2020
git checkout trunk
git branch -D my_branch
git pull
git checkout my_branch

Повторное создание мне помогло: я просто удалил свою локальную ветку и снова вытащил изменения из ствола. Потом переключился на my_branch.

Вот и все. Всем спасибо!

0 голосов
/ 21 июня 2020

Что ж, вы должны сохранить содержимое вашей текущей ветки:

git checkout my_branch
git checkout -b by_branch_saved

Затем вернуться в my_branch и сделать полный сброс:

git checkout my_branch 
git reset --hard my_branch <latest_stable_version_without_your_changes>

После всего этого вы можете выполнить rebase без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...