Я использую 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
, чтобы направить исправленную версию на сервер?
Спасибо за ваш ответ. Я сделаю то, что вы предложили в одно мгновение, но прежде чем я это сделаю, я просто хочу проверить: после выполнения этих действий и выполнения 'git reset -hard origin/master' , я потеряю любые из моих предыдущих коммитов/других филиалов, или все мои истории фиксации и другие филиалы все еще будут готовы снова использоваться в будущем, если я решит, что мне нужно? Извинения, если это кажется довольно простым, - это просто то, что я совершенно новичок в Git и все еще немного не знаю, как это работает ... – someone2088
Все хорошие вопросы: операция сброса сбрасывает вашу ветку _local_ 'master' на все, что находится на _дистанционный пульт_. Если у вас есть локальные коммиты, которые вы еще не нажали на пульт, то вы не должны использовать этот метод. Если это так, я могу дать вам способ найти локальную локацию для сброса. –
Настройка, с которой я работаю, - это: на реальном сервере у меня есть один филиал - «мастер», который в настоящее время находится в рабочем состоянии, и мои коллеги используют его для управления своими рабочими проектами каждый день (вот почему мне нужно чтобы быть абсолютно уверенными в каких-либо изменениях, которые я нажимаю на живой сервер, работают и не нарушат ничего другого, что в настоящее время работает). На моей локальной машине у меня есть несколько ветвей - «мастер», которые в теории всегда должны быть такими же, как ветвь «master» на сервере, а затем иметь несколько других ветвей, которые были созданы из 'master', git branch newBranch', который у меня есть – someone2088