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


208

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

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

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


Я написал подробную статью со скриншотами. Делясь надеждой, что это поможет: attosol.com/undo-in-git-using-sourcetree
Рахул Сони

Ответы:


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

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

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

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

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

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


34
Или, если вы работаете над веткой - «Сбросить текущую ветку для этого коммита»
Том Ожер

5
Я так сильно не понимаю эти объяснения пользовательского интерфейса ... Сбросить текущую ветку для этого коммита так много, как будто это не удалит коммит. И все закончилось тем, что ты ожидал большего. Это сбрасывает мою рабочую копию в коммит, а не удаляет его.
MrFox

Я согласен с @MrFox. После того, как я сделал это, коммит, который я не хочу, все еще отображается в дереве.
Тимммм

@Timmmm: новое объяснение помогает?
nightlyop

На самом деле я понял, что уже продвинул свой коммит на github. Я нашел статью, которая объясняет, как «переписать историю», но кажется, что это больше проблем, чем оно того стоит!
Тимммм

46

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

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


3
Если вы все еще видите значок, показывающий, что Push доступен из вашего предыдущего коммита (который вы только что удалили), pull и Sourcetree, похоже, обновят пользовательский интерфейс.
ChristoKiwi

6

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

В Sourcetree:

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

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


Это ответ, который я искал, работал именно так, как нужно.
Клифф Бертон

0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.