Oto dwa różne pytania, ale myślę, że są ze sobą powiązane.
Podczas korzystania z Git, jak znaleźć zmiany, które wprowadziłem lokalnie, ale nie zostały jeszcze przesłane do zdalnej gałęzi? Szukam czegoś podobnego do komendy Mercurial
hg outgoing
.Podczas korzystania z Git, jak znaleźć zmiany w zdalnej gałęzi przed wykonaniem ściągnięcia? Szukam czegoś podobnego do komendy Mercurial
hg incoming
.
Po drugie: czy istnieje sposób, aby sprawdzić, co jest dostępne, a następnie wybrać najlepsze zmiany, które chcę wprowadzić?
hg incoming
ihg outgoing
faktycznie robimy. Najbliższy odpowiednik Gita, który znalazłem, to--dry-run
opcja. Po prostu,git pull --dry-run
a zobaczysz listę wszystkich rzeczy, które muszą się wydarzyć.Odpowiedzi:
Git nie może wysyłać tego rodzaju informacji przez sieć, jak Hg. Ale możesz uruchomić
git fetch
(co jest bardziej podobnehg pull
niżhg fetch
), aby pobrać nowe zatwierdzenia ze zdalnych serwerów.Tak więc, jeśli masz wywoływaną gałąź
master
i zdalnąorigin
, po uruchomieniugit fetch
powinieneś mieć również gałąź o nazwieorigin/master
. Następnie możesz uzyskaćgit log
wszystkie zatwierdzenia, któremaster
muszą być nadzbioremorigin/master
, wykonując czynnościgit log master..origin/master
. Odwróć te dwa, aby uzyskać przeciwieństwo.Mój przyjaciel, David Dollar, stworzył kilka skryptów powłoki git do symulacji
hg incoming/outgoing
. Możesz je znaleźć pod adresem http://github.com/ddollar/git-utils .źródło
Począwszy od Git 1.7.0 istnieje specjalna składnia, która pozwala na ogólne odwoływanie się do gałęzi upstream:
@{u}
lub@{upstream}
.Aby naśladować
hg incoming
:Aby naśladować
hg outgoing
:Używam następujących
incoming
ioutgoing
aliasów, aby ułatwić korzystanie z powyższego:źródło
git branch --set-upstream foo origin/foo
.git log @{u}..
wymienia każdą zmianę w repozytorium dla mnie. Nie ma mowy, żeby jeszcze nie istniały.git rev-parse --symbolic-full-name @{u}
drukuje odpowiednie zdalne odniesienie. Ponadto,git log @{u}..
przedstawiono przesyła potwierdzenie, które nie są dostępne od górnej gałęzi, które mogą zawierać przesyła potwierdzenie, które są już na zdalnym repozytorium (jeśli są one osiągalne za pomocą innego odnośnik). Stanie się to zaraz po scaleniu w już wypchniętej gałęzi.checkout <somebranch>
imerge <otherbranch>
. W tym momencie zrobiłemlog @{u}..
i zobaczyłem każdą wymienioną zmianę.Nie jest to pełna odpowiedź, ale git fetch ściągnie zdalne repozytorium i nie dokona scalenia. Możesz wtedy zrobić
źródło
git diff origin/master master
Użyj „git log origin..HEAD”
Użyj polecenia „git fetch”, a następnie „git log HEAD..origin”. Możesz wybierać poszczególne zatwierdzenia, korzystając z wymienionych identyfikatorów zatwierdzeń.
Powyższe zakłada oczywiście, że „pochodzenie” to nazwa twojej gałęzi zdalnego śledzenia (tak jest, jeśli użyłeś clone z domyślnymi opcjami).
źródło
Jest też to, aby porównać wszystkie gałęzie:
Oto, co mówi o tym strona podręcznika git log:
Powyższe dotyczy
outgoing
. Poincoming
prostu zamień:źródło
chciałbym zrobić
dla
hg incoming
idla
hg outgoing
.źródło
git-out to skrypt, który
hg outgoing
dość dokładnie emuluje . Analizuje dane wyjściowe „push -n”, więc generuje dokładne dane wyjściowe, jeśli trzeba określić dodatkowe argumenty do przekazania.źródło
git przychodzące
git wychodzący
źródło
Kiedy w „git log” i odpowiedziach @ {u} pojawiły się początkowo błędy „nieznanej wersji”, wypróbowałem sugestię Chrisa / Romkynsa
git push --dry-run
.Otrzymasz wynik, taki jak „5905..4878 master-> master”. 5905 to najnowsze zatwierdzenie, które ma pilot i zatwierdza (włącznie) 4878 zostanie zastosowane do pilota.
Następnie możesz użyć 5905..4878 jako argumentów do kilku innych poleceń git, aby uzyskać więcej szczegółów:
źródło
Kiedy wykonujesz pobieranie git, cała zawartość, w tym gałęzie, tagi (referencje) są tymczasowo przechowywane w .git / FETCH_HEAD, których zawartość można wyświetlić za pomocą polecenia: git log FETCH_HEAD Jeśli nie używasz przyrostka -a z git fetch to domyślnie , Zawartość FETCH_HEAD zostanie nadpisana przez nową zawartość. Z tej zawartości możesz przeglądać i zdecydować, do której gałęzi chcesz je scalić, jeśli to zrobisz, lub możesz po prostu wybierać, jeśli chcesz tylko kilka zatwierdzeń z tego, co zostało przyniesione przez fetch.
źródło