Възможно ли е да изтеглите само един файл в Git?

Работя върху клон на Git, който има някои повредени тестове, и бих искал да изтегля (обединя промените, а не просто да презапиша) тези тестове от друг клон, където вече са коригирани.

Знам, че мога

git pull origin that_other_branch

но това ще се опита да обедини много други файлове, за което все още не съм готов.

Възможно ли е да изтеглите и обедините само посочения файл (а не всичко) от този друг клон?

Това не е дубликат на заявка за изтегляне на Git само за един файл тъй като всички отговори на този въпрос са как да върнете локално променения файл към версията на хранилището, без да променяте никакви клонове.


person Audrius Meskauskas    schedule 26.04.2013    source източник


Отговори (5)


Можете да извлечете и след това да проверите само един файл по този начин:

git fetch
git checkout -m <revision> <yourfilepath>
git add <yourfilepath>
git commit

Относно командата git checkout:

  • <revision> -- име на клон, т.е. origin/master
  • <yourfilepath> не включва името на хранилището (което можете да получите, като щракнете върху бутона copy path на страница с файл в GitHub), т.е. README.md
person aleroot    schedule 26.04.2013
comment
Хеш кодовете, изисквани от ключ -m, могат да бъдат отпечатани с git branch -v. Страхотно! - person Audrius Meskauskas; 30.04.2013
comment
Отлично. Това ми е помагало повече от един път. За да поясним, флагът -m изглежда е доволен от хеша на ангажимента, от който искате да изтеглите единичния си файл. - person rd108; 15.11.2013
comment
Това проработи и при мен. Въпреки това стартирах git log на моя отдалечен клон, за да намеря реверсията: напр. $ git log remotes/origin/master - person Dan; 23.12.2013
comment
можете да получите най-новия отдалечен хеш от .git/refs/remotes/origin/master. - person Marcello Nuccio; 24.07.2014
comment
Git автоматично добавя файла, който се извлича към индекса (във версията, която използвам: 1.9.4.msysgit.1). Така че третата стъпка не е необходима, но не вреди. - person Dennis van der Schagt; 13.01.2015
comment
Възможно ли е да се изтегли конкретен файл, без да се изтеглят други файлове? - person Nagappa L M; 13.05.2015
comment
@aleroot какво означава ‹ревизия›? - person Wakan Tanka; 01.12.2016
comment
Това просто презаписва файла, не се слива. Може да е работило преди, но сега не работи - person wrangler; 04.12.2018
comment
@wrangler решението работи според очакванията и решава проблема на OP, тъй като той е приел отговора... Ако имате други изисквания освен OP, тогава би било по-добре да зададете конкретен въпрос, вместо да гласувате против и да коментирате лошо приет отговор ... - person aleroot; 04.12.2018

Ето един малко по-лесен метод, който току-що измислих, когато проучвах това:

git fetch {remote}
git checkout FETCH_HEAD -- {file}
person Chris    schedule 22.08.2014
comment
фатален: невалидна препратка: FETCH_HEAD - person Antony D'Andrea; 24.08.2017
comment
В този отговор вероятно липсва работещ пример. Не е ясно дали някой трябва да се ангажира следващия. - person Dr_Zaszuś; 16.08.2018
comment
@Chris имаме ли нужда от {remote}, ако вече сме в клон? Ако отговорът е да, защо? - person Cloud Cho; 26.09.2019
comment
Не е същото като pull, което ще направи опит за сливане, поради което искаме да използваме pull. - person JosephK; 29.01.2020

git checkout master -- myplugin.js

master = име на клон

myplugin.js = име на файл

person Mawardy    schedule 26.06.2018
comment
и има ли начин да се върна обратно? - person liyuan; 25.03.2019
comment
не забравяйте да 'git pull' преди това ;) - person matson kepson; 24.05.2019

Отговорът на @Mawardy работи за мен, но промените ми бяха на дистанционното, така че трябваше да посоча произхода

git checkout origin/master -- {filename}
person Luke Flournoy    schedule 03.02.2019

Да, ето го процесът:

# Navigate to a directory and initiate a local repository
git init        

# Add remote repository to be tracked for changes:   
git remote add origin https://github.com/username/repository_name.git

# Track all changes made on above remote repository
# This will show files on remote repository not available on local repository
git fetch

# Add file present in staging area for checkout
git check origin/master -m /path/to/file
# NOTE: /path/to/file is a relative path from repository_name
git add /path/to/file

# Verify track of file(s) being committed to local repository
git status

# Commit to local repository
git commit -m "commit message"

# You may perform a final check of the staging area again with git status
person Community    schedule 08.07.2019
comment
Пропуснах реда git checkout, защото е скрит между коментарите. Също така, това казва git check вместо git checkout. - person trash80; 19.05.2021