2016-07-19 2 views
0

Может ли кто-нибудь помочь избежать проблемы с объединением git. Я пытаюсь объединить мою ветку, чтобы сказать, что my_branch в другую ветку позволяет сказать another_branch. Поскольку another_branch - это базовая ветвь. Чтобы добавить работу в my_branch, сначала я объединяю my_branch. Для этого я делаю эти шаги.git merge перезаписывает изменения

git checkout another_branch
git pull anothr_branch

После того, как я обновил последние изменения в another_branch я переключаюсь на my_branch

git checkout my_branch
git merge anothr_branch

И прежде чем делать все это да я совершаю и постановка мои изменения сохранить его локально. Поэтому, без сомнения, я могу потерять какие-либо из моих изменений.

Но я не вижу всех изменений another_branch.So, я называю это переписыванием.

В чем может быть причина?

+0

Спасибо за отрицательную маркировку, но не могли бы вы объяснить, почему так – deep

+0

Из вашего описания очень сложно понять, что на самом деле произошло. Если бы вы могли привести пример перезаписываемых изменений, вы получили бы более полезные ответы. Обычно git не перезаписывает ничего во время слияния. – max630

+0

Хорошо. Но вы сказали очень интересное двусмысленное утверждение, если вы можете мне ответить, это поможет мне не попасть в ту же ситуацию. Вы сказали ** Обычно ** git не перезаписывает ничего ** во время ** слияния. Так значит, у означает, что git перезаписывает, но в какой-то другой операции, но не в слиянии? – deep

ответ

1

Что вы, вероятно, хотите сделать, это использовать rebase. Положения переустановки фиксируются в ветке назначения после фиксации в ветви источника.

Так что, если я нахожусь в моей ветке функций, я буду использовать git rebase master - это место, которое у меня есть на моей ветке функций поверх новейших коммитов в master.

Для удаленной ветви я обычно использую git pull --rebase, что задерживает ваши изменения, вытягивает изменения с сервера, помещает ваши изменения поверх новейших изменений с сервера.

Лучшее визуальное руководство по тому, как работы по восстановлению, с которыми я столкнулся, это this one by Atlassian.

Вы можете узнать больше о rebase на этих ресурсах:

+0

Rebase просто берет верх над этой веткой, если я не ошибаюсь. Но, как вы упомянули, git pull --rebase запишет мою работу, тогда это может быть использовано. Спасибо – deep

+0

'pull --rebase' задержит ваши изменения только с Git 2.6 , с 'git config rebase.autostash true', используемым в комбинации' git pull.rebase true': http://stackoverflow.com/a/30209750/6309 – VonC

+0

Не повезло, я попробовал перезагрузить, но его по-прежнему та же ситуация переписывает файлы , на другой платформе я делаю то же самое, но ее слияние должным образом. Я не знаю, что происходит неправильно. Я не хочу использовать запрос pull в этом, поскольку я боюсь, что удаленное репо будет перезаписано. – deep

0

Git не переписывает, пока вы не отметите файлы с конфликтами как решенное (хотя, если они действительно не являются).

Git не пытается быть умным слиянием. Когда вы слились, если он может слиться чисто, он сделает это. Если он не может, он остановит процесс слияния и отметит конфликты, которые вы должны разрешить вручную. После того, как вы закончите разрешение конфликтов файла, вы должны пометить его как разрешенную командой git add <file>... (та же команда, которую вы используете для отслеживания файлов).

Git отмечает конфликты, как так:

<<<<<<< HEAD:index.html 
< div id="footer" > contact : [email protected]</div> 
======= 
<div id="footer" > 
please contact us at [email protected]</div> 
>>>>>>> anotherBranch:index.html 

Верхняя часть (часть перед ====) находится в голову из файла index.html. Нижняя часть находится от ветки с именем anotherBranch из того же файла.

Возможно, вам понравится this part из учебника git.

0

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

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

Каждое утро, все дэвы сделать следующее:
заказ DEV.
Pull.
Оформить заказ рабочая ветвь разработчика.
Rebase на разработчика

В течение всего дня, выше, может повторяться. Разработчики делают запросы на слияние другому разработчику, указанному в качестве хранителя ветки dev.

Разработчик:
Commit changes.
Нажмите

Dev Сопровождающий:
заказ ответвлением от разработчика сливаться.
Pull.
Checout dev.
Объединение от Отправитель от разработчика до объединения.
Push

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