2010-04-26 8 views
9

Robię ciągnij początek some_branch i widzę, że jest wiele zmian. W końcu nie mam nic przeciwko temu, żeby usunąć wszystkie moje.Jak mogę zaakceptować wszystkie zmiany z pilota?

Jak mogę je wszystkie zaakceptować zamiast tego lub użyć plików mergetool i scalić pliki jeden po drugim?

Odpowiedz

8

Wystarczy:

git clone $url 

Poważnie! To najlepszy sposób.

Można wykonać wiele różnych poleceń, aby przenieść referencje, ale jedynym celem byłoby utrzymanie twoich zatwierdzeń gdzieś w lokalnym repozytorium, aby móc z nich skorzystać w przyszłości. Jeśli to jest celem, po prostu zachowaj całe repozytorium bez zmian i ponownie sklonuj pochodzenie.

Aby zaakceptować wszystkie zmiany na tylko jednej gałęzi, foo:

git checkout foo 
    git fetch origin +refs/heads/foo:refs/remotes/origin/foo 
    git reset refs/remotes/origin/foo 

foo będzie teraz wskazywać na ten sam popełnić jak foo na origin. Jeśli chcesz zdmuchnąć pliki z katalogu roboczego, dodaj --hard do git reset. Jeśli chcesz najpierw scalić, zamień fetch na pull.

Być może w lokalnym repozytorium pojawiło się kilka zwiastunów, których git może kiedyś się oczyścić, ale przez jakiś czas nadal będzie można uzyskać do nich dostęp za pośrednictwem rejestru.

+0

Dobrze wiedzieć :-) –

+1

Istnieje ogromny problem z tym: Mam wiele * dodatków * do drzewa roboczego. Chcę tylko zaakceptować/zastosować wszystkie zmiany, które zostały wprowadzone w pilocie. Nie chcę wyrzucać całego stanu mojej obecnej pracy. To nie działa jako odpowiedź dla mnie. – rfay

+0

@Randy, To inne pytanie, ale dobre. – cdunn2001

0

Oto podejście, które zastosowałem, które wydaje się być w porządku. Mam gałąź o nazwie "ich", która zawiera nową wersję wszystkiego w pilocie. Wersja o nazwie "ours" to moja praca oparta na dawno już ich wersji, która zbyt wiele nieistotnych zmian, ale wiele dodatków (nowe podkatalogi witryn/wszystkich), które chcę zachować.

git checkout ours 
git checkout theirs -- *.php *.txt *.config modules themes includes scripts 
git commit -m "New version with all new key files from 'theirs'" 

Dopóki otrzymam listę plików i katalogów w drugim kasie, to powinno być dobrze.

Gdybym chciał, aby historia była oparta na "ich" gałęzi, mógłbym chcieć zrobić to w drugą stronę.

+0

Randy, Możesz edytować ten komentarz, a następnie wcięcia każdej linii kodu o 8 spacji (może 4?), Aby pokazać, co masz na myśli. '--ours' i '--theirs' są poprawnymi flagami, więc powinieneś użyć różnych słów dla ilustracyjnych nazw gałęzi. Ale tak, określenie ścieżek pozwoli mu uzyskać tylko te pliki. – cdunn2001

5

Lub:

git status | grep "both " | cut -f2 | cut -f11 -d" " | xargs git checkout --theirs 
git status | grep "both " | cut -f2 | cut -f11 -d" " | xargs git add 

który wymusza przyjmowanie wszystkich sprzecznych plików zdalnych.