Как избавиться от локальных коммитов в git? - PullRequest
6 голосов
/ 25 марта 2011

Пусть честно, я столкнулся с трудностями с моим git-репозиторием.Я работал над одним и тем же проектом с двух разных машин (скажем, на работе и дома).Существует также удаленное хранилище (origin), в котором я храню главную копию кода.

В начале я клонировал форму хранилища origin master и запустил новую ветку (newfeature).Ежедневно, когда я заканчиваю изменения на работе, я помещаю свои коммиты из ветки newfeature в origin.То же самое, когда я работаю дома.

Вчера я закончил работу над новой функцией дома, поэтому я проверил нашу master, а затем слил newfeature ветку.Все прошло великолепно, поэтому я перенес свою новую ветку master на origin, а затем удалил ветку newfeature локально и удаленно.Ранее сегодня на работе я проверил master, который теперь содержит новую объединенную функцию.Когда я запускаю git status, теперь он говорит, что нечего коммитить, но моя локальная ветвь master опережает origin master на 38 коммитов.

Как мне избавиться от любого из этих локальныхкоммиты впереди, так как я знаю, что origin master имеет самый последний код?

Ответы [ 2 ]

19 голосов
/ 25 марта 2011

Вы должны сбросить ветку master на origin/master:

git checkout master
git reset --hard origin/master

Предупреждение: При аппаратном сбросе все изменения в вашей рабочей копии будут отменены и будут выполнены в точности какэто было в origin/master.

Если я не правильно понял ваш вопрос или у вас возникли мысли, помните, что git reflog ваш друг.

4 голосов
/ 25 марта 2011

Мне кажется, в описании вашей проблемы есть какая-то ошибка.

Вы говорите, что у вас были какие-то коммиты, которые вы выдвинули к источнику из дома.Теперь вы работаете, и вы проверили мастер ветку и там написано, что она впереди оригинала / мастера ??Как я понимаю, источник / мастер должны быть впереди.

В этих обстоятельствах вам нужно сделать следующее:

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

    git fetch

Это будет извлечено из всех настроенных пультов, затем вы сможетесравнить состояние вашей основной ветки с источником / мастером и посмотреть, действительно ли есть различия или просто нет правильной синхронизации

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

    git checkout master

    git pull

  2. Теперь, когда вы говорите, что reset --hard привел вас в состояние, в котором выне нравится - вам не нужно снова клонировать с пульта.Просто сделайте это:

    git reflog show master

И затем сбросьте ваш мастер обратно на коммит, на который он указывал до сброса --hard

Вы должны быть на первом месте.

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