Ветка git pull origin хочет слияния на чистой текущей ветке master
Я нахожусь в моей основной ветке, которая идеально подходит для чистоты (но git сообщает, что она опережает origin/master на 14 коммитов). Когда я пытаюсь вытащить другую ветку из origin (Eagle), git хочет, чтобы я объединил несколько файлов.
Это не то, чего я ожидаю: когда вы тянете ветку, она должна импортировать удаленную ветку и оставить текущий HEAD нетронутым, а не беспокоить меня конфликтами слияния В моем восприятии 2 ветви живут отдельно друг от друга, но мирно, без конфликтов. Но это восприятие больше не сохраняется.
Что вызывает эти конфликты и как восстановить 2 разных ветки без слияния?
Ниже приведена стенограмма сеанса git в командной строке.
HEAD is now at 34e47ab ISS-652 misspelled MockBean in test/ApplicationContext
build@jenkins/p-project/workspace> git status
# On branch master
# Your branch is ahead of 'origin/master' by 14 commits.
#
nothing to commit (working directory clean)
build@jenkins/p-project/workspace> git log -5
.. Same as origin
build@jenkins/p-project/workspace> git push origin master
Everything up-to-date
build@jenkins/p-project/workspace> git status
# On branch master
# Your branch is ahead of 'origin/master' by 14 commits.
#
nothing to commit (working directory clean)
build@jenkins/p-project/workspace> git pull origin Eagle
From ssh://git@stash.europe.intranet:7999/hig/p-project-container
* branch Eagle -> FETCH_HEAD
Auto-merged pom.xml
CONFLICT (content): Merge conflict in pom.xml
Auto-merged p-project-client/pom.xml
CONFLICT (content): Merge conflict in p-project-client/pom.xml
Auto-merged p-project-container-conf/pom.xml
CONFLICT (content): Merge conflict in p-project-container-conf/pom.xml
Auto-merged p-project-container-conf/src/main/resources/dpl/P-Project_Container.xml
CONFLICT (content): Merge conflict in p-project-container-conf/src/main/resources/dpl/P-Project_Container.xml
Auto-merged p-project-container-conf/src/main/resources/was/P-Project_Container-app-env.cfg
Auto-merged p-project-container-ear/pom.xml
CONFLICT (content): Merge conflict in p-project-container-ear/pom.xml
Auto-merged p-project-container-filters/pom.xml
CONFLICT (content): Merge conflict in p-project-container-filters/pom.xml
Auto-merged p-project-container-ldap/pom.xml
CONFLICT (content): Merge conflict in p-project-container-ldap/pom.xml
Auto-merged p-project-container-tomcattest/pom.xml
CONFLICT (content): Merge conflict in p-project-container-tomcattest/pom.xml
Auto-merged p-project-container-web/pom.xml
CONFLICT (content): Merge conflict in p-project-container-web/pom.xml
Automatic merge failed; fix conflicts and then commit the result.
build@jenkins/p-project/workspace>
2 ответа
Какие git pull origin branch
делает то, что он выбирает и объединяет удаленную ветку с вашей текущей локальной веткой. Итак, результат приведенной выше команды - объединить удаленную ветку eagle
в ваш местный мастер.
Я думаю, что вы хотите, чтобы создать новую локальную независимую ветвь, которая отслеживает соответствующую удаленную ветвь. Вы можете сделать это с
git fetch
git checkout -b eagle --track origin/eagle
Это создаст новую отдельную локальную ветвь eagle
который будет отражать удаленную ветвь eagle
,
Эта локальная ветвь будет независима от вашей локальной ветки master и не затронет вашего локального master.
Ты можешь сделать git status
и это покажет Your branch is up-to-date with 'origin/eagle'.
и вы можете проверить мастер с git checkout master
а затем делать git status
покажет ahead by 14 commits
,
Я объясню, что вы сделали, после чего станет ясно, что ожидаемых результатов можно ожидать.
Вы сделали 14 коммитов в master
ветвь с момента последней синхронизации с удаленным репозиторием:
git commit -m 'You did something' # you did this 14 times
Затем вы перенесли свою работу на пульт:
git push origin master
Обратите внимание, что git status
по-прежнему показывает ваш локальный филиал как 14 коммитов впереди master
, Ваша локальная ветвь опережает старую устаревшую локальную ветвь отслеживания, но полностью синхронизирована с удаленной master
,
Далее вы сделали это:
git pull origin Eagle
что является сокращением для:
git fetch origin
git merge origin/Eagle
Другими словами, вы сначала загрузили последние изменения с пульта во все ваши ветви отслеживания (хорошо), затем вы объединили Eagle
филиал в вашем местном master
(плохой). Причина, по которой это произошло, в том, что вы никогда не переключали ветви, прежде чем делать это git pull
,
Что нужно сделать, чтобы это исправить:
Вам нужно сделать 2 шага. Во-первых, вам нужно отменить неправильное слияние в master
ветка. Во-вторых, вы должны переключить ветви на Eagle
, а затем сделать git pull
,
# on the master branch
git log
# find the SHA-1 hash immediately BEFORE the bad merge, then do
git reset --hard SHA-1
# next switch to the Eagle branch
git checkout Eagle
# finally do the correct pull
git pull origin Eagle
У вас все еще могут быть конфликты слияния, но они будут настоящими конфликтами, а не результатом слияния Eagle
в master
,