2009-05-11 12 views
21

Pracuję w 100% z odgałęzieniem, które zrobiłem z gałęzi głównej. Teraz, gdy kolega cofnął się do pochodzenia/mistrza, starałem się przenieść te zmiany do mojej osobistej branży. Kiedy zrobić „git checkout” mistrz następnie przez „stan git” pojawia się następujący:Git: w jaki sposób gałąź nie angażuję się przed pochodzenia/master

# Your branch is ahead of 'origin/master' by 2 commits. 

Jak oddział nigdy zobowiązać się do przodu o 2 zobowiązuje? Jaki jest najlepszy sposób, aby dowiedzieć się, jakie są ich zobowiązania i zasadniczo je zniszczyć? Nie chcę niczego przekazywać z powrotem do oryginału/wzorca, ponieważ może to spowodować nieznane konflikty.

+0

Dla Gita będącego tak prostym narzędziem, jest to najbardziej zagmatwana część. Mam taki sam problem jak ty.Nigdy nie zobowiązuję się do mojej głównej gałęzi. Zawsze się rozgałęziam i wprowadzam zmiany. Kiedy robię "mistrza git pull origin", dostaję, że jest 200 popełnia z tyłu. Czemu? Nigdy tego nie dotknąłem. Chciałbym, żeby to wyjaśnili. – Jeff

Odpowiedz

35

Aby zobaczyć zobowiązuje masz w głowie, który nie są pochodzenia/Master:

git log origin/master.. 

dmuchać je i uczynić swoją głowę tak samo jak pochodzenia/Master:

git reset --hard origin/master 

Jak czy wprowadziłeś zmiany do własnego repozytorium? Zauważyłem, że wspomniałeś "push" ... Czy pochodzenie jest centralnym repo? Repo twojego kolegi? Podejrzewam, że to, co naprawdę chcieliście zrobić, to przyciągnąć zmiany swojego kolegi, bezpośrednio lub z centralnego punktu postoju, zamiast pchać. Może się zdarzyć, że 2 zmiany, które masz przed źródłem/początkiem, są zmianami twojego kolegi, ale gałąź śledzenia pochodzenia/wzorca jest nieaktualna.

+0

Dzięki araqnid. Po prostu ciekawy, co robi Git Log Origin/Master .. w tym przypadku? –

+3

Z komendami git, które przyjmują * zakres * wersji, A..B jest skrótem dla "B^A" lub "B - nie A". "A .." samo w sobie jest skrótem dla "HEAD - not A". git wczytuje rewizję B, a następnie przechodzi z powrotem przez wykres wersji, zatrzymując się, gdy napotka na załączniki, które są osiągalne od A (często A). W przypadku zwykłej historii wersji, w której wykres jest tylko linią, upraszcza to pokazywanie zatwierdzeń po A do B. – araqnid

+0

+1 Dziękuję. <3 –

0

Czy wykonałeś jakieś git rebase "na gałęzi, nad którą pracujesz ?

Jeśli nie, możesz spróbować skopiować swój oddział (git checkout -b testrebase) i wydać numer git rebase master, aby sprawdzić, czy to działa. Spowoduje to rozplątanie wszystkich dokonanych przez ciebie commitów względem mistrza, a następnie spróbuje je zastosować (zasadniczo, aby historia miała sens). Jeśli to nie działa, po prostu usuń testrebase.

4

Pracujesz na gałęzi master i dokonaniu dwóch zobowiązuje, które nie są w origin/master.

Komunikat # Your branch is ahead of 'origin/master' by 2 commits. mówi:

# Your branch 'mybranch' has two commits not in 'origin/master' 

wyobrażając użytkowników SVN-git jak numery wersji, jesteś oddział zobowiązuje 1, 2, 3, 4, 5 - ale origin/master ma 1, 2 tylko, 3. Tak więc historia rewizji wyglądał poniższym diagramie brzydko ASCII ..

your branch         -- [commit 4]--[commit 5] 
              /     /\ HEAD 
master --[commit 1]--[commit 2]--[commit 3]-/ 
             /\ origin/master 

Aby wyświetlić ostatnie dwie rewizje w dzienniku, można to zrobić ..

git log HEAD..HEAD~2 
0

Być może trzeba upewnić się, że pochodzenie/master jest na bieżąco z twoją wersją repo mistrza. Spróbuj uruchomić:

git fetch origin master 

, więc Twoje lokalne pochodzenie/mistrz jest taki sam jak mistrz repozytorium. Następnie po uruchomieniu należy uzyskać dokładny obraz liczby zatwierdzeń wyprzedzających lokalnego administratora. Następnie możesz uruchomić araqnid's command, aby zobaczyć, które zatwierdzenia faktycznie są różne.