Mam dwie gałęzie, które są całkowicie połączone.
Jednak po zakończeniu scalania zdaję sobie sprawę, że jeden plik został pomieszany przez scalanie (ktoś inny dokonał automatycznego formatowania, gah), i łatwiej byłoby przejść do nowej wersji w drugiej gałęzi i następnie ponownie wstaw moją zmianę jednej linii po przeniesieniu jej do mojego oddziału.
Więc jak najłatwiej to zrobić w git?
git
git-branch
branching-and-merging
madlep
źródło
źródło
Odpowiedzi:
Uruchom to z gałęzi, w której chcesz, aby plik się skończył:
Ogólne wzory:
Niektóre uwagi (z komentarzy):
myfile.txt
imydir
alternatywa:
źródło
''
aby nie zostały zinterpretowane przez powłokę.Skończyło się na tym pytaniu podczas podobnych poszukiwań. W moim przypadku chciałem wyodrębnić plik z innej gałęzi do bieżącego katalogu roboczego, który był inny niż pierwotna lokalizacja pliku. Odpowiedź :
źródło
git diff <other branch> <path to file>
działa dobrze.Co z użyciem polecenia kasy:
źródło
git diff
obsługuje--stat
argument, który zasadniczo robi to samo co diffstat.1) Upewnij się, że jesteś w oddziale, w którym potrzebujesz kopii pliku. na przykład: chcę plik gałęzi sub w master, więc musisz przejść do kasy lub powinien być w master
git checkout master
2) Teraz sprawdź sam konkretny plik, który chcesz z gałęzi sub w master,
tutaj
sub_branch
środki, gdzie masz ten plik, a następnie nazwę pliku trzeba skopiować.źródło
Po odpowiedzi madlepa możesz również skopiować jeden katalog z innego oddziału za pomocą obiektu blob katalogu.
Jeśli chodzi o pytanie op, jeśli zmieniłeś tylko jeden plik, będzie to działało dobrze ^ _ ^
źródło
origin/other-branch
w odniesieniu do gałęzi repo. Podstawy, ale mnie ugryzłeś. (odpowiedź jest świetna - nie wymaga edycji)Chciałbym użyć
git restore
(dostępny od gita 2.23)git restore --source otherbranch path/to/myfile.txt
Dlaczego jest lepszy niż inne opcje?
git checkout otherbranch -- path/to/myfile.txt
- Kopiuje plik do katalogu roboczego, ale także do obszaru przejściowego (podobny efekt, jakbyś skopiował ten plik ręcznie i wykonałgit add
na nim).git restore
nie dotyka obszaru przeciwności (chyba że jest to zalecane przez--staged
opcję).git show otherbranch:path/to/myfile.txt > path/to/myfile.txt
używa standardowego przekierowania powłoki. Jeśli używasz programu Powershell, może występować problem z kodowaniem tekstu lub możesz popsuć plik, jeśli jest on binarny . Zegit restore
zmieniającymi plików odbywa się przez całygit
wykonywalny.Kolejną zaletą jest to, że możesz przywrócić cały folder za pomocą:
git restore --source otherbranch path/to
lub z,
git restore --overlay --source otherbranch path/to
jeśli chcesz uniknąć usuwania plików. Na przykład, jeśli jest mniej plikówotherbranch
niż w bieżącym katalogu roboczym (a pliki te są śledzone ) bez--overlay
opcjigit restore
spowoduje ich usunięcie. Ale to jest dobre zachowanie domyślne, najprawdopodobniej chcesz, aby stan katalogu był taki sam jak wotherbranch
, nie „taki sam, ale z dodatkowymi plikami w mojej bieżącej gałęzi”źródło
git restore
sposób na skopiowanie pliku z gałęzi źródłowej do nowego pliku w gałęzi docelowej? Z git show mogę to zrobić za pomocą przekierowania powłoki (git show otherbranch:path/to/file1.txt > path/to/file2.txt
), ale chcę uniknąć przekierowania powłoki z powodów, o których wspomniałeś.git restore
(ale kto wie;)). Te problemy z przekierowaniem są w zasadzie problemem PowerShell, nie jestem pewien, czy jest jakaś inna powłoka, która ma z tym problem. Zwykle wracam do „git bash” lub nawet „cmd”, gdzie muszę użyćgit show
poleceń „ z przekierowaniem”. Lub użyj GUI, takiego jak GitExtensions, w którym możesz przeglądać drzewo plików zatwierdzeń i kliknąć „Zapisz jako” na dowolnym pliku.Należy pamiętać, że w zaakceptowanej odpowiedzi pierwsza opcja zastępuje cały plik z drugiej gałęzi (np
git add ...
zostało wykonane), a druga opcja powoduje po prostu skopiowanie pliku, ale nie wprowadza zmian (tak jakbyś miał właśnie edytowałem plik ręcznie i miałem wyjątkowe różnice).Pobierz plik kopii z innej gałęzi bez przemieszczania go
Wprowadzone zmiany (np .
git add filename)
:Zmiany nierozstrzygnięte (nie etapowe ani nie zatwierdzone):
źródło