#git
#мерзавец
Вопрос:
Допустим, я извлекаю содержимое mainline
репозитория, вношу некоторые изменения, добавляю один коммит my_commit
. В то же время кто-то другой нажал someone_commit
на кнопку дистанционного mainline
управления. Теперь, если я захочу нажать, если я это сделаю git pull
, возникнут конфликты, и мне придется добавить merge
коммит. Есть ли способ, которым я мог бы добиться чего-то вроде previous_commits->someone_commit->my_commit
вместо `
previous_commits->someone_commit -> merge commits of ...
->my_commit ->
Ответ №1:
Да, это цель git rebase
.
Что-то вроде:
git rebase origin/mainline
Это сбросит вашу ветку на магистраль (с previous_commits
помощью подсказки), а затем воспроизведет ваши коммиты сверху.
Вам будет предложено разрешить конфликты, если таковые имеются.
Следующее не имеет отношения к вашей текущей ситуации, но учтите, что это изменит историю вашей локальной ветки. Если вы уже отправили свои локальные коммиты в ветку разработки, вам нужно будет использовать принудительную фиксацию, чтобы переписать историю в ветке удаленной разработки. Но если, как вы говорите, вы и коллега работаете в одной и той же ветке, то это вряд ли будет проблемой (и принудительное нажатие на общую ветку может вызвать серьезные проблемы)
Комментарии:
1. Итак, мой текущий коммит имеет HEAD-> mainline, который находится на один коммит впереди от источника / магистрали локально. Мой локальный источник / магистраль находится на фиксации за удаленным. Похоже, это
git rebase origin/mainline
не работает?2. Попробуйте
git fetch
. Это должно вытащить исходные коммиты в вашейorigin/mainline
ветке. (Я предполагаюmainline
, что это имя ветки)