2014-01-03 3 views
2

Я работаю над веткой (my-branch), которую я создал из мастера.git pull origin master дает слияние конфликта: что мне делать?

$ git checkout -b my-branch 

Я редактировал некоторые файлы, а затем проверил их в новую отрасль:

$ git commit -a -m 'Add new feature' 

Тогда я вытащил из мастера (я не совсем уверен, почему я это сделал, или, если это хорошая практика):

$ git pull origin master 

Но вытягивать дал мне много сообщений об ошибках:

From github.com 
* branch   master  -> FETCH_HEAD 
Auto-merging styles/common/module_more_info.scss 
CONFLICT (add/add): Merge conflict in styles/common/module_more_info.scss 
Auto-merging app/support/stagecraft_stub/responses/cloud.json 
CONFLICT (content): Merge conflict in app/support/stagecraft_stub/responses/cloud.json 
Auto-merging app/support/backdrop_stub/response_fetcher.js 
CONFLICT (content): Merge conflict in app/support/backdrop_stub/response_fetcher.js 
Automatic merge failed; fix conflicts and then commit the result. 
[email protected]:/var/apps/spotlight$ git status 

Запуск git status теперь показывает много измененных файлов:

# На ветке мой Гиса

# Changes to be committed: 
# 
#  modified: CONTRIBUTING.md 
#  modified: README.md 
#  modified: app/appBuilder.js 
[lots more files] 
# 
# Unmerged paths: 
# (use "git add/rm <file>..." as appropriate to mark resolution) 
# 
#  both modified:  app/support/backdrop_stub/response_fetcher.js 
#  both modified:  app/support/stagecraft_stub/responses/cloud.json 
#  both added:   styles/common/module_more_info.scss 

Во-первых, то, что произошло, а во-вторых, что мне делать?

Если я пытаюсь увидеть, что различия в любом из верхнего списка файлов, я получаю пустой вывод, что сбивает с толком (почему он хочет меня совершить этот файл, если нет дифференциалов?):

$ git diff CONTRIBUTING.md 
$ 

Должен ли я просмотреть три файла, которые находятся под Unmerged paths, а затем передать это как объединение слиянием? ОБНОВЛЕНИЕ: Самое главное, могу ли я затем нажать его в свою ветку без испортить мастер-ветку?

Кажется, я не могу отбросить последнюю фиксацию.

ответ

0

Открыть файл конфликта и устранить устранение различий.

Тогда:

git add . 
git commit -am "resolve conflicts" 
git push origin master 
+0

Push to master? Но я хочу только нажать на свою ветку, я не хочу толкать к мастеру ... могу ли я нажать на свою ветку и оставить хозяина нетронутым? – flossfan

+0

'-am' верен? –

+0

'git add .' не требуется с' -am'. или '-a' не требуется с помощью' git add .' – emmagras

0

В принципе, да. git mergetool может быть полезен. Он просто открывает инструмент слияния с файлами, которые требуют вашего внимания, а затем добавляет их в индекс. С помощью простого git commit вы можете создать конфликт слияния.

Вы всегда можете вернуться к состоянию перед вашим нажатием, выполнив git reset --hard HEAD.

+0

Спасибо - будет 'git reset --hard HEAD' потерять мои предыдущие фиксации, правда? – flossfan

+0

Нет. В вашем случае 'HEAD' ссылается на' refs/heads/my-branch', и это должно быть связано с последней фиксацией на ветке 'my-branch' до начала слияния. Следовательно, с помощью перезагрузки на 'HEAD' вы возвращаетесь к состоянию вашего последнего коммита. – gregor

0

Что могло произойти в том, что:

  1. Некоторые один еще редактировал или объединено его код с Учителем.
  2. У вас есть другая кодировка от последнего пользователя, который редактировал Master.

Решение:

git mergetool <you can left here blank your choose a mergetool from those you have installed in your machine> 
3

Не используйте инструмент слияния, потому что это сбивает с толку вас. Пожалуйста, сделайте резервную копию своего текущего кода и верните изменения в текущую ветку. Затем проверьте свой мастер (dev), получите последнюю, затем перепишите свои изменения, затем нажмите.

Прежде всего, необходимо набрать gitk --all в вашем GitHub, для которого филиал будет в настоящее время открыты показан верхняя сторона

, то вам нужно revert что или rebase кода с сервером последней версии коды:

затем

проверьте, следуете ли вы для перехода своей ветви на сервер.

git status 

git add . 

git status 

git commit -a -m "Comments" 

git push origin yourbranchname 

Это все ...

+0

@isherwood Я принял ваши изменения, спасибо, сэр –

0

Итак, сначала настроить инструмент слияния. Я предлагаю установить this

  • Теперь ваши изменения находятся в противоречии с удалёнными и вы должны разрешить конфликты. ли для каждого файла:

    • мерзавец слияния инструмент

    • Сохраните файл.

Теперь вы сказали мерзавец, что вы знаете, что там были конфликты, но вы хотите их решить, как вы это делали с помощью слияния инструмента. Итак, конфликты теперь решены.

git status 

Теперь необходимо зафиксировать разрешенные файлы, а затем нажать их.

PS. Другой подход заключается в том, чтобы спрятать ваши изменения вместо фиксации, затем вытащить из источника, а затем всплыть.

git stash save 
git pull 
git stash pop 
git commit 
git pull 

Но от того, что я прочитал, если вы уверены, что ваши изменения, вы должны зафиксировать их, как вы делали, а затем объединить их. Слияние очень часто, и вы должны знать, как с этим справиться.

Смежные вопросы