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:
- Щелкните правой кнопкой мыши на коммите, который старше, чем тот, который вы хотите удалить, и выберите "Перебазировать дочерние элементы xxxx в интерактивном режиме...". Тот, который вы нажмете, станет вашей "базой", и вы сможете вносить изменения в каждый коммит, сделанный после этого.
- В новом окне выберите коммит, который вы хотите удалить, и нажмите "Удалить" -button внизу или щелкните правой кнопкой мыши на коммите и нажмите "Удалить коммит".
- Нажмите "ОК" (или "Отмена", если хотите отменить).
Посмотрите этот блог Atlassian, чтобы узнать больше об интерактивном перебазировании в Sourcetree.