Jak pobrać tylko jeden plik z innej gałęzi

Używam Gita i pracuję na gałęzi master. Ta gałąź ma plik o nazwie app.js.

Mam gałąź experiment, w której wprowadziłem kilka zmian i mnóstwo commitów. Teraz chcę przenieść wszystkie zmiany tylko do app.js z experiment do master branch.

Jak to zrobić?

Po raz kolejny nie chcę połączenia. Chcę tylko przenieść wszystkie zmiany w app.js z gałęzi experiment do gałęzi master.

Author: 7ochem, 2010-03-02

5 answers

git checkout master               # first get back to master
git checkout experiment -- app.js # then copy the version of app.js 
                                  # from branch "experiment"

Zobacz także git jak cofnąć zmiany w jednym pliku?

Jako Jakub Narębski wspomina w komentarzach:

git show experiment:path/to/app.js > app.js

Działa również, z tym wyjątkiem, że jak szczegółowo opisano w pytaniu " Jak odzyskać pojedynczy plik z konkretnej rewizji w Git?", musisz użyć pełnej ścieżki z katalogu głównego repo.
Stąd ścieżka / do / aplikacji.js użyty przez Jakuba w jego przykładzie.

Jako mroźny wspomina w komentarzu:

Otrzymasz tylko najnowszy stan aplikacji.js

Ale, dla git checkout lub git show, możesz odwołać się do dowolnej wersji, jak pokazano w pytaniu " Git checkout rewizja pliku w gui git":

$ git show $REVISION:$FILENAME
$ git checkout $REVISION -- $FILENAME

Będzie tak samo, jeśli $FILENAME jest pełną ścieżką wersjonowanego pliku.

$REVISION może być jak pokazano w git rev-parse:

experiment@{yesterday}:app.js # app.js as it was yesterday 
experiment^:app.js            # app.js on the first commit parent
experiment@{2}:app.js         # app.js two commits ago

I tak dalej.

 1119
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:29

Wszystko jest o wiele prostsze, użyj do tego git checkout.

Przypuśćmy you're on master branch, aby uzyskać app.js from new-feature oddział do:

git checkout new-feature path/to/app.js

// note that there is no leading slash in the path!

Spowoduje to wyświetlenie zawartości żądanego pliku. Możesz, jak zawsze, użyć części sha1 zamiast nowość-funkcja Nazwa gałęzi , aby uzyskać plik taki, jaki był w danym commicie.

 246
Author: Dmitry Avtonomov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-12 18:44:19

Uzupełnienie odpowiedzi VonC i chhh.

git show experiment:path/to/relative/app.js > app.js
# If your current working directory is relative than just use
git show experiment:app.js > app.js

Lub

git checkout experiment -- app.js
 29
Author: AlexLordThorsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-12 21:16:14
git checkout branch_name file_name

Przykład:

git checkout master App.java
 8
Author: Sarath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-11 11:44:42

Lub jeśli chcesz wszystkie pliki z innej gałęzi:

git checkout <brachname> -- .
 6
Author: Jester,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-20 02:43:06