2017-01-05 9 views
1

Я использую Git в качестве контроля версий для проекта Django/Python, для которого я недавно взял на себя разработку, не использовал его ранее.Git merge- Уже обновлен: жесткий сброс?

Недавно я создал новую ветку от ветви master, чтобы работать над исправлением ошибки (очевидно, делая разработку на моей локальной машине с намерением нажать на нее, как только я исправил ошибку) ,

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

После завершения работы, я попытался объединить dateReceived назад с моим местным master, но существует целый ряд конфликтов, которые, казалось, нарушить мой местный master филиал, и я был не в состоянии решить их, так что версия на моем местном master больше не работал.

Я восстановил локальный master резерв, который я сделал из текущей версии на сервере, проверив commit, что я сделал до начала работы над этой ошибкой, когда все остальное все еще работало. Это означало, что я был ненадолго в состоянии «ошеломленной головы», прежде чем я снова начал/разветвлялся и начал работать оттуда. Тогда я больше не был в состоянии «оторванной головы».

Итак, на реальном сервере у меня есть исходная ветвь master, которая работает правильно - за исключением ошибки, с которой я работаю локально, и на моей машине разработки у меня есть две ветви: master, которая обновленный с версией на реальном сервере (и на котором ошибка все еще существует) и dateReceived, которая работает правильно (с исправленной ошибкой).

Если я закажу свою ветку master и просмотрю сайт в своем браузере от localhost:800/.../.../concept, я вижу, что ошибка все еще существует, когда я пытаюсь выполнить эту функцию на этой странице веб-сайта.

Но если я зарегистрирую свою ветку dateReceived и просмотрю сайт в своем браузере от localhost:8000/.../.../concept, я вижу, что ошибка была исправлена, когда я пытаюсь выполнить эту конкретную функцию на этой странице веб-сайта.

Если я пытаюсь слияния dateReceived в master теперь снова на моей локальной машине (готов выдвинуть свою местную master ветвь к серверу, когда он находится в актуальном состоянии с ошибкой фиксированной) с помощью команды:

git merge dateReceived 

от моего master ветви, я получаю сообщение, что говорит:

Уже уточненный

, но это явно не так, поскольку ошибка все еще существует в master, но исправлена ​​в dateReceived.

Если я бег:

git diff dateReceived 

из моего master филиала, список различий между master и dateReceived являются shown- так ясно, Git может сказать, что существует различие между двумя ветвями ...

Я нашел аналогичный вопрос по адресу: Git merge reports "Already up-to-date" though there is a difference

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

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

Действительно ли это единственный способ решить проблему, с которой я столкнулся с master, говоря, что она уже обновлена ​​при попытке объединить в нее еще одну ветку, хотя я действительно могу видеть, что это не так, или есть ли что-нибудь еще, что я могу сделать?

Каковы потенциальные риски совершения hard reset и как можно свести к минимуму эти риски? Есть ли что-нибудь еще, что я могу сделать, чтобы решить эту проблему git merge, чтобы я мог объединить dateReceived в master, чтобы направить исправленную версию на сервер?

ответ

1

принятый ответ, кажется, предполагает, что ветвь Я пытаюсь объединить является родителем моей текущей ветви

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

git fetch origin     # update origin/master to the remote 
git checkout master    # switch to local master branch 
git reset --hard origin/master # reset local master to origin/master 

А затем попытайтесь сделать слияние снова:

git merge dateReceived 

Если вы конфликтов слияния, не паникуйте, а рассмотрим каждый конфликтный файл в IDE, если это возможно, или даже в любом текстовом редакторе. Я предполагаю, что вы сможете пройти через них. Затем сделайте фиксацию слияния и, надеюсь, ваша ошибка должна быть разрешена.

+0

Спасибо за ваш ответ. Я сделаю то, что вы предложили в одно мгновение, но прежде чем я это сделаю, я просто хочу проверить: после выполнения этих действий и выполнения 'git reset -hard origin/master' , я потеряю любые из моих предыдущих коммитов/других филиалов, или все мои истории фиксации и другие филиалы все еще будут готовы снова использоваться в будущем, если я решит, что мне нужно? Извинения, если это кажется довольно простым, - это просто то, что я совершенно новичок в Git и все еще немного не знаю, как это работает ... – someone2088

+0

Все хорошие вопросы: операция сброса сбрасывает вашу ветку _local_ 'master' на все, что находится на _дистанционный пульт_. Если у вас есть локальные коммиты, которые вы еще не нажали на пульт, то вы не должны использовать этот метод. Если это так, я могу дать вам способ найти локальную локацию для сброса. –

+0

Настройка, с которой я работаю, - это: на реальном сервере у меня есть один филиал - «мастер», который в настоящее время находится в рабочем состоянии, и мои коллеги используют его для управления своими рабочими проектами каждый день (вот почему мне нужно чтобы быть абсолютно уверенными в каких-либо изменениях, которые я нажимаю на живой сервер, работают и не нарушат ничего другого, что в настоящее время работает). На моей локальной машине у меня есть несколько ветвей - «мастер», которые в теории всегда должны быть такими же, как ветвь «master» на сервере, а затем иметь несколько других ветвей, которые были созданы из 'master', git branch newBranch', который у меня есть – someone2088