2015-08-31 17 views
5

Intellij ma funkcję, która jest bardzo fajna teoretycznie, o nazwie Smart Checkout. Ta funkcja uruchamia się, gdy zmieniasz gałęzie i masz pliki w bieżącym oddziale, który został zmodyfikowany, ale nie został zatwierdzony.Cofnij Intellij Smart Checkout

Zamiast wymuszać zatwierdzanie, ukrywanie lub odkładanie zmian, przechowuje je dla ciebie, przełącza gałęzie, a następnie uruchamia stash pop w nowym oddziale.

Sądzę, że to jest to, czego byś chciał czasami, ale uruchomiłem to po przełączeniu na niewłaściwą gałąź.

Więc, teraz mój oddział master jest pełen zmian, które należą do innej gałęzi, niektóre pliki zgłaszają konflikty scalania i mam różnego rodzaju ból.

Co chcę osiągnąć jest:

  1. całkowite usunięcie zmiany z gałęzi master.
  2. Przenieś je z powrotem do oddziału, w którym pracowałem.

Czy istnieje sposób, aby to zrobić?

+0

Nawiasem mówiąc, utrata tych zmian jest bardzo bolesna .... kilka dni pracy. Chciałbym je odzyskać. – mlissner

+2

tego rodzaju magia jest właśnie dlatego wolę używać integracji IDE VCS tylko do operacji odczytu i zawsze dodawać, ukrywać, zatwierdzać, itp. W linii poleceń. tak czy inaczej, możesz odzyskać ukryte zmiany (z tego powodu jest wiele pytań związanych z SO, np. http://stackoverflow.com/questions/89332/how-to-recover-a-dropped-stash-in-git) z łatwością narzędzia git. – ThiefMaster

+0

Korzystanie z narzędzia takiego jak Atlassian Sourcetree ostrzeże Cię, że twoje lokalne zmiany zostaną nadpisane przez kasę, co pozwoli uniknąć takiej sytuacji! Myślę, że polecenie takie jak narzędzie git może zrobić to samo, ale nie jestem w 100% pewny. – mvd

Odpowiedz

5

Oto co najmniej częściowa odpowiedź, która działa, jeśli podczas konfliktu seryjnego wystąpił konflikt scalający. Jak wspomniano w moim pytaniu, funkcja inteligentnej usługi kasowania używa stash do przechowywania zmian lokalnych, a następnie do zastosowania ich w nowym oddziale po jego wyrejestrowaniu.

Sposób, w jaki Intellij to robi, polega na użyciu numeru stash w oddziale, w którym aktualnie się znajdujesz, a następnie za pomocą numeru stash pop w gałęzi, do której przełączasz się.

Gdy zmiany są ukryte, są umieszczane na stosie ukrytych zmian u góry. Następnie po uruchomieniu stash pop zmiany te są usuwane ze stosu i stosowane.

Przynajmniej w większości przypadków tak się dzieje. Jeśli jednak wystąpi konflikt scalania, Intellij poinformuje o takich przypadkach, a przechowalnia zostanie zachowana. można zobaczyć stos stashes uruchamiając:

git stash list 

Jeśli chcesz zapas jest nadal na liście, co można zrobić, to po prostu kasy oddziału ty były pierwotnie na. Zresetuj go, a następnie wykonaj stash apply, który jest podobny do stash pop, ale nie usuwa skrytki z listy. Więc:

git checkout $original-branch 
git reset HARD 
git stash apply 

Następnie, jeśli wszystko jest w porządku, można wyjąć zapas z:

git stash drop 

Ponieważ ta odpowiedź jest dość szorstka i obejmuje tylko jedną sytuację, mam oznaczenie jako wiki społeczności . Ulepszenia są bardzo mile widziane.