2010-01-29 10 views
92

W git, ukrywam moje zmiany. Czy to możliwe, że mogę stworzyć łatkę z tym, co ukrywam? I zastosować tę poprawkę w innym repozytorium (moim współpracowniku)?W jaki sposób mogę sformatować łatę z tym, co ukrywam?

Znam 'git format-patch -1', ale myślę, że to jest za to, co popełniłem. Ale szukam tego samego dla zmian, które ukryłem?

A jak mogę zastosować poprawkę w innym repozytorium?

Odpowiedz

108

Jasne git stash show obsługuje to:

git stash show -p 
+1

Mam pytanie związane zastosować poprawkę. Powiedzmy, że moja łata dotyka wielu plików. Czy istnieje sposób na zastosowanie łatki "interaktywnie"?Wybierz, z których plików łatki powinienem zastosować łatę? Czy mogę to zrobić? – silverburgh

+1

@silverburgh: Szybko przejrzałem 'man patch' i nie widziałem żadnych opcji aplikacji interaktywnej. Ponieważ jednak pliki łat są same plikami tekstowymi, zwykle wystarczy edytować łatkę w edytorze tekstowym, aby wyciąć odpowiednie części do zastosowania z 'łatką'. Alternatywnie, jeśli aplikujesz łatę do innego repozytorium Git, możesz zastosować to wszystko, a następnie selektywnie pliki 'git checkout', których nie chcesz zmienić (' git checkout' z nazwą pliku wyrzuca niezaprogramowane zmiany). –

+0

@silverburgh można ograniczyć zestaw plików załatanych przy użyciu "--exclude" i "--include" paragrafów git. – Kelvin

15

Korzystając

$> git stash list 
[email protected]{0}: WIP on master: 84fx31c Merged with change to /public/ 
[email protected]{1}: WIP on master: 463yf85 FlupResource: also takes json as a query parameter 

aby uzyskać listę swojej niedawno stashed rzeczy. Git w rzeczywistości tworzy obiekty zatwierdzania, gdy przechowujesz.

Są zobowiązaniami, jak wszystko inne. Możesz je sprawdzić w oddziale:

$> git checkout -b with_stash [email protected]{0} 

Możesz następnie opublikować tę gałąź, a Ty możesz połączyć lub wybrać tę opcję.

10

Powyższe rozwiązania nie będą działać w przypadku danych binarnych. Poniższy dodać wsparcie dla niego:

git stash show [email protected]{0} -p --binary 

Edit

Uwaga: Po prostu chciałem, aby dodać komentarz do powyższych odpowiedziach ale moja reputacja nie jest wystarczające.

28

Ta odpowiedź zawiera informacje na temat zapisywania poprawki i stosowania jej tam, gdzie ma być używana.

ukryta wyjście w pliku:

git stash show -p --color=never > my-patch-name.patch 

Verify łata wygląda dobrze:

git apply --stat my-patch-name.patch 

Sprawdź błędów:

git apply --check my-patch-name.patch 

Zastosuj poprawkę

git apply my-patch-name.patch 
+0

Ten działał dla mnie z plikami z czystym tekstem, ale musiałem uwzględnić białą przestrzeń. Sprawdź łata wygląda dobrze: 'git zastosować --check --ignore-space-change --ignore-spacji my-patch-name.patch' zastosować poprawkę: ' git zastosować --ignore- space-change --ignore-whitespace my-patch-name.patch' –

1

Wierzę, że to może być jeden z udpates od Git ostatnio. nie musisz już łatać zmian, które ukryłeś. możesz po prostu zastosować zmiany ukryte w jednej gałęzi do drugiej.

powiedzieć, że w oddziale A zostały ukryte pewne zmiany, określone jako skrytka @ {1}.

teraz przejść do oddziału B. można po prostu zrobić:

$git stash apply [email protected]{1} 

dotyczy to zmiany gałęzi na gałąź B.

Powiązane problemy