2013-05-22 2 views
0

Я работал над некоторым кодом, который, поспешно, я испортил, из-за чего мне пришлось git -восстановить предыдущую фиксацию. Теперь, когда у меня все получилось нормально, git push говорит, что моя текущая ветка находится за удаленной ветвью. Я боюсь, что, выполняя git pull и объединяя изменения с удаленной ветвью, мой код снова вернется к ошибкой. Есть ли способ, когда я завершу отклонение изменений удаленной ветви и вместо этого сохраняю только новую? (И я могу вернуться к толкая изменения в удаленный репозиторий)Удаление удаленных изменений после git pull

Большое спасибо

+1

Вы можете принудительно нажать, но я рекомендую сохранить работу на пульте дистанционного управления в отдельной ветви ... git push origin -f master –

+2

Посмотрите на ['git push -force'] (https: // www. kernel.org/pub/software/scm/git/docs/git-push.html). Будьте очень осторожны с этим, хотя. – adrianbanks

ответ

3

Если

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

git push -f origin <branch>

2

Вы могли бы сделать git push --force origin branchname, но это, вероятно, не самое лучшее решение, если вы ветви были разделены.

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

К счастью, git безумный и позволяет исправить это даже тем, что у вас есть.

Чтобы сделать это выглядит примерно так (начиная с ветки вы заботитесь о подталкивании в конечном счете - позволяет называть его master):

git branch good_tree   # save a branch with your recent commits 
git reset --hard last_good # reset working tree to fix pushed problem 
git fetch --all    # update local repo with remote changes 
git reset origin/master  # move pointer to where remote repo's master is 
           # without changing working tree from last_good 
git add; git commit; git push # commit fixed stuff 
git checkout good_tree  # rebase your changes from last_good 
git rebase master    # tack good_tree onto master from undone changes 
git checkout master   # go back to master 
git merge good_tree   # now you are back to where you want to be 
git push      # and you can push 

... иш - вы можете иметь конфликты.

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