ReinH Git Рабочий процесс

Я использую этот рабочий процесс:

http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html

где он упоминает: "Во-первых, и в то время как в вашей основной ветке (git мастер проверки) вы можете внести самые последние изменения: git мастер создания тяги Это никогда не должно создавать фиксацию слияния, потому что мы никогда не работаем напрямую с мастером ".

Упс, я только что сделал. Я случайно совершил несколько изменений в нескольких файлах моему хозяину (vs my topic branch). Затем я понял свою ошибку - удалил тему. Теперь я хочу избавиться от своих совершенных изменений (для мастера), что делать правильно? Я еще не переустановил или переместил свои изменения в репо, поэтому он все локально.

В сущности, я хочу вытащить последнюю версию мастер-кода и просто игнорировать все, что я сделал, с моим локальным мастером (который действительно является одним фиксатором).

Ответ 1

Если вы просто хотите выбросить его, пока вы находитесь на главной ветке:

git reset --hard HEAD^

Эта команда будет reset указателем главного HEAD на предыдущую фиксацию. (Вы также можете сказать "HEAD ~ 1", что означает то же, что и HEAD ^.) В более общем плане вы также можете reset ваш мастер быть таким же, как сервер:

git reset --hard origin/master

Это будет работать независимо от состояния мастера (т.е. 5 совершает опережение по происхождению, или 30 коммитов за ним). Опция --hard в этих командах означает, что файлы в рабочем дереве также будут reset вместе с головами ветвей.

Дополнительные советы

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

git fetch             # This grabs changes from the server without merging them
git rebase origin

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

Еще одна альтернатива - создать ветку тем для вашей работы над мастером:

git checkout -b newfeature

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

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

Ответ 2

Все ваши фиксации, потерянные при удалении ветки, еще есть в git.

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

man git-reflog