2011-01-07 14 views
10

Czy możliwe jest wykonanie "git revert" w Egit w celu cofnięcia zmian poprzez utworzenie nowego zatwierdzenia (w przeciwieństwie do sprawdzenia wcześniejszego zatwierdzenia lub wykonania twardego resetu, który nie tworzy nowego zatwierdzenia zatwierdzenia cofnąć zmiany)?git revert w Egit

Wydaje się to ważną cechą, jeśli masz centralne repozytorium na wypadek, gdybyś musiał cofnąć zmiany, które już zostały tam przekazane.

Z góry dziękuję!

Odpowiedz

3

Jeśli wziąć pod uwagę to commit from 5 days ago, zwany „Merge«Wdrożenie polecenie Przywróć»” (Shawn Pearce), wydaje się, będzie dostępna wkrótce.

diff are here:

public class RevertCommandTest extends RepositoryTestCase { 
     @Test 
     public void testRevert() throws IOException, JGitInternalException, 
         GitAPIException { 
       Git git = new Git(db); 

       writeTrashFile("a", "first line\nsec. line\nthird line\n"); 
       git.add().addFilepattern("a").call(); 
       git.commit().setMessage("create a").call(); 

       writeTrashFile("b", "content\n"); 
       git.add().addFilepattern("b").call(); 
       git.commit().setMessage("create b").call(); 

       writeTrashFile("a", "first line\nsec. line\nthird line\nfourth line\n"); 
       git.add().addFilepattern("a").call(); 
       git.commit().setMessage("enlarged a").call(); 
       writeTrashFile("a", 
           "first line\nsecond line\nthird line\nfourth line\n"); 
       git.add().addFilepattern("a").call(); 
       RevCommit fixingA = git.commit().setMessage("fixed a").call(); 

       writeTrashFile("b", "first line\n"); 
       git.add().addFilepattern("b").call(); 
       git.commit().setMessage("fixed b").call(); 

       git.revert().include(fixingA).call(); 

       assertTrue(new File(db.getWorkTree(), "b").exists()); 
       checkFile(new File(db.getWorkTree(), "a"), 
           "first line\nsec. line\nthird line\nfourth line\n"); 
       Iterator<RevCommit> history = git.log().call().iterator(); 
       assertEquals("Revert \"fixed a\"", history.next().getShortMessage()); 
       assertEquals("fixed b", history.next().getFullMessage()); 
       assertEquals("fixed a", history.next().getFullMessage()); 
       assertEquals("enlarged a", history.next().getFullMessage()); 
       assertEquals("create b", history.next().getFullMessage()); 
       assertEquals("create a", history.next().getFullMessage()); 
       assertFalse(history.hasNext()); 
     } 
} 
+0

myślę, że potwierdza to nie jest po prostu możliwe dotychczas. Dzięki! – Christian

10
  • zainstalować najnowszą nightly z Egit (0.11.xx)
  • otwarte Historia Zobacz
  • prawym przyciskiem myszy na commit chcesz przywrócić w aktualnie wyrejestrowany oddział
  • kliknij "Revert Commit"

- Matthias

+0

Zrobiłem to, ale potem nie byłem w stanie zatwierdzić i przekazać do zdalnego repozytorium. Chcę określonego starszego zobowiązania, aby zostać HEAD ... – Lennon

+0

@Lennon, więc potrzebujesz resetowania – Joqus

1

Nie mogę komentować ze względu na niską reputację, ale chciałem dodać ostatni fragment do odpowiedzi @Matthias Sohn na wszelki wypadek, gdy ktoś, jak ja, znajdzie to, szukając, jak to zrobić. Jego kroki są tutaj poniżej, dzięki czemu nie trzeba przewijać:

  • zainstalować najnowszą nightly z Egit (0.11.xx)
  • otwarte Historia Zobacz
  • prawym przyciskiem myszy na commit chcesz przywrócić w aktualnie wyrejestrowany oddział
  • kliknij „Przywróć commit”

Spowoduje to dodanie wpisu w górnej części widoku historii „Przywróć [poprzedni popełnić komentarz]”. Jeśli klikniesz prawym przyciskiem myszy ten nowy wpis, zobaczysz opcję zatwierdzenia operacji Przywróć. Musisz to zrobić z widoku Historii, ponieważ jak powiedział @Lennon, nie możesz zatwierdzać i wypychać z Eksploratora pakietów.

Wadą tej metody jest Przywrócenie wszystkich zmian w zatwierdzeniu. Wolałbym móc przywrócić tylko określony plik, który był w zestawie zmian, więc jeśli ktoś wie, jak to zrobić, proszę dodać.

0

Kliknij prawym przyciskiem myszy plik, który chcesz przywrócić -> Zamień -> rewizji HEAD

Powiązane problemy