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 є більше прикладів .


34
Або якщо ви працюєте у відділенні - "Скинути поточну гілку до цього комітету"
Том Ожер,

5
Я так сильно не розумію цих пояснень інтерфейсу ... Скинути поточну гілку до цього коміту так сильно не здається, що вона видалить фіксацію. І це в кінцевому підсумку робило те, чого ви очікували б більше. Він скидає мою робочу копію до комітету, а не видаляючи її.
MrFox

Я згоден з @MrFox. Після того, як я це зробив, я все ще не відображається на дереві.
Timmmm

@Timmmm: Чи допомагає нове пояснення?
nightlyop

Насправді я зрозумів, що вже підштовхнув свою прихильність до github. Я знайшов статтю, яка пояснює, як "переписати історію", але здається, що це більше клопоту, ніж варто!
Timmmm

46

Якщо ви вибрали запис журналу, до якого ви хочете повернутись, ви можете натиснути кнопку "Скинути цю комісію". Використовуйте цю опцію лише в тому випадку, якщо ви не натиснули зміни на зворотному фіксації. Якщо ви турбуєтесь про втрату змін, тоді ви можете скористатися м'яким режимом, який залишить без змін зміни (що ви щойно змінили). Використання змішаного скидає робочу копію, але зберігає ці зміни, і важкий спосіб просто позбудеться цих змін. Ось кілька скріншотів:

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


3
Якщо ви все ще бачите піктограму, що показує, що Push доступний із попереднього дозволу (який ви тільки що видалили), потягніть, і Sourcetree, здається, оновить інтерфейс користувача.
ChristoKiwi

6

Якщо ви хочете видалити комітку, ви можете зробити це як частина інтерактивної бази даних. Але робіть це обережно, щоб ви не закінчилися зіпсувати репо.

В Sourcetree:

  1. Клацніть правою кнопкою миші команду, старшу за ту, яку ви хочете видалити, і виберіть " Інтерактивне відновлення дітей xxxx ... ". Той, який ви натискаєте, стане вашою "базою", і ви зможете вносити зміни до кожного зобов'язання, зробленого після цього.
  2. У новому вікні виберіть команду, яку ви хочете піти, і натисніть кнопку " Видалити " внизу, або клацніть правою кнопкою миші та натисніть " Видалити фіксацію ".
  3. Клацніть « ОК » (або « Скасувати », якщо ви хочете робити аборт).

Перегляньте цю публікацію в блозі Atlassian, щоб отримати докладнішу інформацію про інтерактивний рисинг в Sourcetree.


Це відповідь, яку я шукав, працював саме так, як потрібно.
Кліфф Бертон

0

Якщо ви перебуваєте на іншій гілці, вам спочатку потрібно "перевірити цю комісію" на предмет комісії, яку ви хочете видалити, і лише після цього "скинути поточну гілку на цю фіксацію", вибравши попередню фіксацію Райт.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.