Sourcetree - cofnij nieprzypisane zobowiązania


208

Używam Sourcetree dla Windows do repozytorium git i chciałbym cofnąć niepodawane zatwierdzenie.

Czy to jest możliwe? Jeśli zrobię „przywróć zatwierdzenie”, utworzy drugie zatwierdzenie, które cofa pierwsze zatwierdzenie, ale nie chcę, aby pierwsze zatwierdzenie pojawiło się w mojej kontroli źródła.

Mogę również usunąć moje lokalne repozytorium i pobrać je ponownie bez mojego lokalnego zatwierdzenia, ale może jest inny sposób?


Napisałem szczegółowy artykuł ze zrzutami ekranu. Dzielę się
Rahul Soni

Odpowiedzi:


345
  1. Kliknij prawym przyciskiem myszy zatwierdzenie, które chcesz zresetować (nie ten, który chcesz usunąć!)
  2. Wybierz „Zresetuj master do tego zatwierdzenia”
  3. Wybierz „Miękki” reset.

Miękki reset zachowa lokalne zmiany.

Źródło: https://answers.atlassian.com/questions/153791/how-should-i-remove-push-commit-from-sourcetree

Edytować

About git revert: To polecenie tworzy nowe zatwierdzenie, które cofnie inne zatwierdzenia. Np. Jeśli masz zatwierdzenie, które dodaje nowy plik, git revertmożna go użyć do zatwierdzenia, które usunie nowy plik.

Informacje o zastosowaniu miękkiego resetu: Załóżmy, że masz commits Ado E( A---B---C---D---E) i chcesz usunąć ostatni commit ( E). Następnie możesz wykonać miękki reset, aby zatwierdzić D. Przy miękkim resecie zatwierdzenie Ezostanie usunięte z git, ale lokalne zmiany zostaną zachowane. Jest więcej przykładów w dokumentacji git reset .


34
Lub jeśli pracujesz nad oddziałem - „Zresetuj bieżący oddział do tego zatwierdzenia”
Tom Auger,

5
Tak bardzo nie rozumiem tych wyjaśnień interfejsu użytkownika ... Zresetuj bieżącą gałąź do tego zatwierdzenia tak bardzo, że nie brzmi, jakby usunęło zatwierdzenie. I skończyło się na robieniu tego, czego można oczekiwać. Resetuje moją kopię roboczą do zatwierdzenia, zamiast ją usuwać.
MrFox

Zgadzam się z @MrFox. Po zrobieniu tego zatwierdzenie, którego nie chcę, jest nadal widoczne w drzewie.
Timmmm,

@Timmmm: Czy nowe wyjaśnienie pomaga?
nightlyop

W rzeczywistości zdałem sobie sprawę, że już pchnąłem swoje zobowiązanie do github. Znalazłem artykuł, który wyjaśnia, jak „przepisać historię”, ale wydaje się, że to więcej kłopotów niż jest warte!
Timmmm

46

Jeśli wybierzesz wpis dziennika, do którego chcesz przywrócić, możesz kliknąć „Resetuj do tego zatwierdzenia”. Tej opcji należy używać tylko wtedy, gdy nie wprowadzono zmian wstecznego zatwierdzania. Jeśli martwisz się utratą zmian, możesz użyć trybu miękkiego, który pozostawi zestaw niezatwierdzonych zmian (co właśnie zmieniłeś). Za pomocą mieszanego resetuje kopię roboczą, ale zachowuje te zmiany, a dysk twardy po prostu całkowicie je usunie. Oto kilka zrzutów ekranu:

wprowadź opis zdjęcia tutaj


3
Jeśli nadal widzisz ikonę pokazującą, że Push jest dostępny z twojego poprzedniego zatwierdzenia (który właśnie wyczyściłeś), ściągnij i Sourcetree wydaje się aktualizować interfejs użytkownika.
ChristoKiwi,

6

Jeśli chcesz usunąć zatwierdzenie, możesz to zrobić jako część interaktywnej bazy. Ale rób to ostrożnie, aby nie popsuć repozytorium.

W Sourcetree:

  1. Kliknij prawym przyciskiem zatwierdzenie, które jest starsze niż to, które chcesz usunąć, i wybierz „ Interaktywuj dzieci xxxx interaktywnie ... ”. Ten, który klikniesz, będzie twoją „bazą” i możesz wprowadzić zmiany w każdym zatwierdzeniu dokonanym po tym.
  2. W nowym oknie wybierz zatwierdzenie, którego chcesz nie było, i naciśnij przycisk „ Usuń ” u dołu lub kliknij zatwierdzenie prawym przyciskiem myszy i kliknij „ Usuń zatwierdzenie ”.
  3. Kliknij „ OK ” (lub „ Anuluj ”, jeśli chcesz przerwać).

Sprawdź ten post na blogu Atlassian, aby uzyskać więcej informacji na temat interaktywnego bazowania w Sourcetree.


Oto odpowiedź, której szukałem, działała dokładnie tak, jak trzeba.
Cliff Burton

0

Jeśli jesteś w innej gałęzi, najpierw musisz „sprawdzić to zatwierdzenie”, aby zatwierdzić, którą chcesz usunąć, a dopiero potem „zresetuj bieżącą gałąź do tego zatwierdzenia”, wybierając poprzednie zatwierdzenie wrighta, zadziała.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.