2009-09-30 13 views
5

Usuwam plik z mojego katalogu roboczego. A potem robię "git pull". Inna osoba w moim zespole modyfikuje ten sam plik i "git push" na HEAD.Jak wyświetlić zmianę podczas "konfliktu łączenia" w git rebase

Więc kiedy zrobić „rebase git”, pojawia się konflikt scalania coś jak „git CONFLICT (Usuń)”

Moje pytanie brzmi: w jaki sposób mogę się dowiedzieć, jakie zmiany zrobił to inna osoba w zespole wykonana do pliku, który "usunę"?

Dziękuję.

Odpowiedz

7

gdy występuje konflikt podczas łączenia lub przebazować różne wersje pliku jest dostępny z:

  • odpowiednich odgałęzieniach:

    $ git show HEAD:path/to/file 
    $ git show branch:path/to/file 
    
  • w etapach 1, 2 i 3 w index:

    $ git ls-files --unmerged 
    # ... 
    $ git show :1:path/to/file 
    $ git show :2:path/to/file 
    

Istnieją również narzędzia, takie jak "git diff --cc" i "git log --merge".

Zobacz dokumentację, aby poznać szczegóły.

+0

Dziękuję. Czy istnieje zatwierdzenie, które pozwala uzyskać cały plik w gałęzi HEAD śledzenia? Myślałem o zrobieniu "git show: 2: path/to/file> myFile", ale to może zmienić formatowanie lub wiersz. Czy istnieje lepszy sposób? – n179911

+0

Można użyć niskiego poziomu "' git cat-file -p: 2: path/to/file> myFile ", jak sądzę. –

4

Git przechowuje kopię stanu odgałęzień w repozytorium jako gałąź "zdalnego śledzenia". Jeśli wykonasz numer git branch -r, zobaczysz listę wszystkich zdalnych gałęzi. Wybierz ten, który odpowiada gałęzi, nad którym pracujesz, i zrobić coś takiego:

git diff HEAD^..origin/master 

To powinno pokazać Ci zmienia między głową rodzica (zakładając swoją kasowania został ostatni popełnić, modyfikować w razie potrzeby) oraz obecny stan oddziału upstream.

0

Utwórz kolejną gałąź z ostatniego znanego dobrego pociągnięcia. Następnie wykonaj Pull w nowej gałęzi od znajomego. Będziesz wtedy mógł zająć się logiem nowego oddziału, a następnie wiedzieć, jak połączyć się w dwie gałęzie w jedną, a następnie możesz do niego przejść.

Nasza normalna konfiguracja to posiadanie jednego repozytorium GIT, z którego każdy rebase bazuje. Polecam przerzucanie zamiast ciągnięcia z centralnego repozytorium. Dzieje się tak dlatego, że jeśli pobierzesz z repozytorium, a następnie zmienisz bazę do tego samego repozytorium, twoje zatwierdzenia, które wysłałeś do repozytorium, będą w konflikcie z twoją bieżącą gałęzią. Generalnie łatwiej było, jeśli trzeba użyć polecenia przeciągnij lub pchnij, aby zamiast tego używać łatek.

Np. Nigdy nie rebase z repozytorium, z którego pobrałeś.