2016-08-31 3 views
3

Я новичок в Git и использую WebStorm, чтобы нажимать и тянуть мой код. Мы работаем над общим проектом. Ночью мой друг обновил код и нажал изменения.Git Revert On Remote

Сегодня я вытащил код и объединил изменения, и по ошибке я сохранил свои изменения и отменил изменения, предлагаемые по запросу pull. А затем толкнул эти изменения на мерзавец пульте ..

Так в основном теперь, что я хочу, это:

  1. вернуться к предыдущему состоянию на местном т.е. состояния до запроса тянуть, а также на пульте дистанционного управления я хочу то же состояние, что и в прошлую ночь, т.е. до запроса push.

Итак, это то, что я хочу сделать:

  1. Revert на пульте дистанционного управления для предыдущей версии.
  2. Вытяните код еще раз.
  3. Сделайте слияние.
  4. Нажмите новый код.

Так что сейчас на Remote у меня есть:

  • Мой друг код версии совершить,
  • Тогда моя неправильная версия коммит, который не включает в себя слияние предыдущего кода совершала,
  • И если я последую ниже ответам на возврат на локальный, а затем нажмите, тогда у меня будет моя новая версия для отмены кода. Но, наконец, я хочу на пульте 1 + 3.

Позволяет увидеть это математически

  • X = Местное государство, в котором я открыл свой компьютер и изменил код и
    совершил.
  • Y = Удаленное состояние, где мой друг изменился на своем локальном компьютере и нажал на пульте вчера вечером.
  • Z = Удаленное состояние, когда я вытащил код моего друга и начал слияние, но сделал ошибку и отменил изменения моим другом, а затем зафиксировал и нажал код, который в основном соответствует состоянию x для удаленного.

Таким образом, в основном

  • на моей локальной у меня есть состояние Z.
  • на пульте дистанционного управления у меня есть состояние Z
  • на моего друга местного государственного Y.

Я хочу на удаленном X + Y.

+0

Вы не можете «нажать на невольный код». Только фиксированный код может быть нажат. С вашего вопроса неясно, что именно произошло. Не зная точной последовательности нежелательных команд git и не зная точно, как вы планируете решить проблему, авторитетный ответ будет невозможным. –

+0

Что вы в основном делаете, чтобы очистить любой из этих беспорядков (особенно на репо, который не используется другими) - это очистить вашу локальную ветку. Вы можете выполнить сброс до более старой версии, а вишня выбрать изменения, которые вы хотите сохранить. Как только ваша ветка будет хорошо выглядеть, ваш силовой толчок. Это изменит историю, но также очистит следы вашего стыда. Если кто-то (сервер сборки) проверяет эту ветвь, вы можете очистить/очистить рабочее пространство и начать все заново. – eckes

+0

@SamVarshavchik Привет, я думаю, что я сделал какую-то ошибку, и во время фазы слияния я сохранил свой код, и, следовательно, он нажал объединенный код, сделанный мной, который не включал измененные изменения кода. –

ответ

1

Если вы хотите вернуть коммита вы можете использовать эту команду:

git revert commit id goes here 

Пример:

git revert aa12bb34 

Это то, что revert делает:

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

+0

Но эта команда будет делать изменения только по местному праву. Поскольку код, который я работаю, является общим пространством, я хочу вернуться на удаленный доступ, чтобы каждый элемент отображал предыдущую версию. –

+0

@ArjunChaudhary Это должно работать для удаленных, а не только локальных. – Harrison

+3

Я думаю, что если вам это нужно на пульте дистанционного управления, то после вашего «возврата» вам нужно нажать новый набор фиксаций на пульт с помощью «git push». Поскольку revert commit - это всего лишь обратная сторона первоначальной фиксации, вам, вероятно, не придется принудительно нажимать. –

0

Основываясь на вашем частичном описании, кажется маловероятным, что вы использовали какие-либо из «опасных» опций, и вы просто добавили и нажали плохую фиксацию на удаленный.

Предполагая, что удаленный репозиторий «происхождения», а также филиал в вопросе «мастер»:

git log origin/master 

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

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

git checkout -b master-before-i-tried-to-fix-this-mess 

Теперь возьмите совершить хэш перед слиянием, и первым, сделайте неразрушающую проверку:

git checkout <hash> 

Где <hash> - это хэш непосредственно предшествующего фиксации перед вашим плохим слиянием.

Теперь посмотрите в своем каталоге. Убедите себя, что это был кончик удаленной ветви, прежде чем она перепуталась.

Затем вернитесь обратно в местное отделение:

git checkout master 

Теперь принудительно сбросить мастер-ветвь на благо совершить:

git reset --hard <hash> 

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

git merge whatever-you-tried-to-merge 

После того, как вы убедили себя, что вы слиты все правильно:

git push --force 

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

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

Если вы обнаружите, что вы испортили снова, вам нужно будет удалить главный локальный филиал, а также использовать свой страховой полис, чтобы восстановить его:

git checkout master-before-i-tried-to-fix-this-mess 
git branch -D master 
git checkout -b master 

Затем повторите попытку.

+0

Теперь вы должны вернуться в состояние перед тем, как выполнить слияние.Теперь попробуйте снова слить: git merge any-you-try-to-merge; До этого мне не нужно вытягивать предыдущий код, тогда я могу объединиться. –

+0

Я имею в виду это git reset --hard Эта команда будет только локально возвращаться к предыдущей фиксации. Теперь, чтобы слиться с кодом прошлой ночи, я также должен вернуться на удаленный. Поэтому, когда я снова вытаскиваю, я могу объединить оба кода. –

+0

Единственный способ вернуться на пульте дистанционного управления - это нажать исправление из вашей локальной ветви. В git нет «возврата на удаленный». Если вы не используете ветви функций, и вы просто совершаете свои изменения на хозяине, ковбойском стиле и просто тянете, чтобы слиться, тогда вы просите о неприятностях. Вы должны использовать ветви функций, которые затем соединяются с мастером. Это упростило бы исправление ошибок, подобных этим. Теперь ваш единственный вариант - просмотреть ваш рефлог, попытаться извлечь бит и часть вашей предыдущей работы, зафиксировать ее и снова нажать. –