возвращение push'd git commit - PullRequest
       19

возвращение push'd git commit

10 голосов
/ 15 марта 2011

У меня есть репо с двумя ветками - master и dev.Я работал над основной веткой, вытащил и получил сообщение о том, что репо обновлен.Я зафиксировал свои изменения и подтолкнул к удаленному репо (на github).Я получил сообщение о том, что некоторые изменения были отклонены.

Затем я сделал git pull origin dev, что, по-видимому, было неправильно, поскольку он сливал ветку dev с моим мастером, и, как идиот, я этого не замечал, пока не нажалснова.Таким образом, последний коммит показывает Merge branch 'dev' of github.com:myuser/myrepo.

. Я могу вернуться к последнему известному исправному состоянию моего локального репо, выполнив git reset --hard [sha], где [sha] будет коммитом до слияния (хотя яя не уверен, как затем сделать это изменение в источнике) - или из того, что я прочитал, я также могу сделать git revert -m и затем зафиксировать / нажать это изменение.

Может ли кто-нибудь провести меня по «правильному пути», чтобы отменить мое слияние и восстановить обе ветви туда, где они были до слияния?

Спасибо - если это имеет значение, то этоВ общем репо только с двумя разработчиками, поэтому он не подвергается значительным изменениям.

Изменить, чтобы добавить: пожалуйста, говорите со мной, как если бы я был ребенком.Я должен признать, что эта штука Git все еще смущает меня, так что я далеко не опытный пользователь!Спасибо

Ответы [ 2 ]

20 голосов
/ 15 марта 2011

git reset --hard [sha] исправит ветку в вашем локальном репозитории. Чтобы заставить этот толчок сработать, вы можете сделать git push origin +master:master. Знак + заставит работать нелинейный толчок.

Если другие разработчики уже извлекли у вас неправильный коммит, им придется выполнить git remote update, затем git reset --hard origin/master (при условии, что они находятся в своей основной ветке и не сделали никаких других коммитов.

Пожалуйста, используйте эти команды с некоторой осторожностью :-). Удачи.

2 голосов
/ 25 августа 2012

Ответ FelipeFG отлично работает в контексте двух разработчиков, где вы можете легко координировать восстановление локального репозитория другого парня, но на самом деле лучше использовать git revert -m<parent id of mainline branch, 1 in this case> <commit ref>.Затем, когда вы закончите исправление, просто git revert <revert commit> и git merge dev (важно отменить ваш возврат для этого случая, потому что в противном случае git merge dev не будет рассматривать ваше старое слияние как предка, и это приведет к конфликтамкоторые должны быть решены).

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

Подробнее см. http://opensource.apple.com/source/Git/Git-26/src/git-htmldocs/howto/revert-a-faulty-merge.txt.

...