Sourcetree - отменить незафиксированные коммиты

Я использую Sourcetree для Windows для git-репозитория и хотел бы отменить необъявленный коммит.

Это возможно? Если я делаю "отменить коммит", он создает второй коммит, который отменяет первый коммит, но я не хочу, чтобы первый коммит вообще появлялся в моем контроле исходного кода.

Я также мог бы удалить свой локальный репозиторий и вытащить его снова без локальной фиксации, но, может быть, есть другой способ?

3 ответа

  1. Щелкните правой кнопкой мыши на коммите, который вы хотите сбросить (не тот, который вы хотите удалить!)
  2. Выберите "Сброс мастера до этого коммита"
  3. Выберите "Мягкий" сброс.

Мягкий сброс сохранит ваши локальные изменения.

Источник: https://answers.atlassian.com/questions/153791/how-should-i-remove-push-commit-from-sourcetree

редактировать

Около git revert: Эта команда создает новый коммит, который отменяет другие коммиты. Например, если у вас есть коммит, который добавляет новый файл, git revert может быть использован для создания коммита, который удалит новый файл.

О применении мягкого сброса: предположим, у вас есть коммиты A в E (A---B---C---D---E) и вам нравится удалять последний коммит (E). Затем вы можете сделать мягкий сброс, чтобы зафиксировать D, С коммитом мягкого сброса E будут удалены из git, но локальные изменения будут сохранены. Есть больше примеров в документации git reset.

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

введите описание изображения здесь

Если вы хотите удалить фиксацию, вы можете сделать это как часть интерактивной перебазировки. Но делайте это осторожно, чтобы не испортить репо.

В Sourcetree:

  1. Щелкните правой кнопкой мыши фиксацию, которая старше той, которую вы хотите удалить, и выберите " Перебазировать дочерние элементы xxxx в интерактивном режиме... ". Тот, который вы щелкнете, будет вашей "базой", и вы сможете вносить изменения в каждый коммит, сделанный после этого.

  1. В новом окне выберите фиксацию, которую вы хотите удалить, и нажмите кнопку " Удалить " внизу или щелкните правой кнопкой мыши фиксацию и нажмите " Удалить фиксацию ".
  2. Пункт списка
  3. Нажмите " ОК " (или " Отмена ", если хотите прервать).

Прочтите это сообщение в блоге Atlassian, чтобы узнать больше об интерактивном перемещении в Sourcetree.

Если вы находитесь в другой ветке, вам нужно сначала "проверить этот коммит" для коммита, который вы хотите удалить, и только потом "сбросить текущую ветку на этот коммит", выбрав предыдущий коммит, будет работать.

Другие вопросы по тегам