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

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

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

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

Ответ 1

  • Щелкните правой кнопкой мыши фиксацию, которую вы хотите использовать reset (не тот, который вы хотите удалить!)
  • Выберите "Reset master для этой фиксации"
  • Выберите "Мягкий" reset.

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

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

Edit

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

В Sourcetree:

  1. Щелкните правой кнопкой мыши на коммите, который старше, чем тот, который вы хотите удалить, и выберите "Перебазировать дочерние элементы xxxx в интерактивном режиме...". Тот, который вы нажмете, станет вашей "базой", и вы сможете вносить изменения в каждый коммит, сделанный после этого.
  2. В новом окне выберите коммит, который вы хотите удалить, и нажмите "Удалить" -button внизу или щелкните правой кнопкой мыши на коммите и нажмите "Удалить коммит".
  3. Нажмите "ОК" (или "Отмена", если хотите отменить).

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