ReinH Git Рабочий процесс - PullRequest
5 голосов
/ 13 мая 2009

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

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

, где он упоминает: «Сначала, и пока вы находитесь в вашей основной ветке (git checkout master), внесите самые последние изменения: мастер происхождения git pull Это никогда не должно создавать коммит слияния, потому что мы никогда не работаем напрямую с master. "

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

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

Ответы [ 2 ]

11 голосов
/ 13 мая 2009

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

git reset --hard HEAD^

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

git reset --hard origin/master

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

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

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

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

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

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

git checkout -b newfeature

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

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

1 голос
/ 13 мая 2009

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

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

man git-reflog
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...