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