Git에서 하나의 파일 만 가져올 수 있습니까?


177

테스트가 깨진 Git 브랜치에서 작업 중이며 이미 수정 된 다른 브랜치에서 이러한 테스트를 가져 와서 변경하지 않고 병합하고 싶습니다.

내가 할 수 있다는 걸 알아

git pull origin that_other_branch

그러나 이것은 아직 준비되지 않았기 때문에 많은 다른 파일을 병합하려고 시도합니다.

다른 지점에서 지정된 파일 만 가져오고 병합 할 수 있습니까?

이 질문에 대한 모든 대답은 분기를 변경하지 않고 로컬로 변경된 파일을 리포지토리 버전으로 되 돌리는 방법이므로 하나의 파일에 대한 Git 풀 요청 의 복제본이 아닙니다 .


7
이 페이지의 어떤 항목도 질문에 대한 답변을 제공하지 않습니다. 문제는 원격 서버에서 하나의 파일 만 가져오고 모든 파일을 가져 오지 않고 로컬로 하나만 체크 아웃한다는 의미입니다. 따라서 질문을 다시 작성하거나 선택한 답변을 질문에 대한 해결책으로 표시하지 않아야합니다.
mljrg 2018 년

답변:


153

이 방법으로 하나의 파일 만 가져오고 체크 아웃 할 수 있습니다.

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

git checkout명령 과 관련하여 : <revision> -브랜치 이름, 즉 origin/master <yourfilepath>저장소 이름을 포함하지 않습니다 ( copy pathGitHub의 파일 페이지에서 버튼을 클릭하여 얻을 수 있음 ).README.md


23
-m 스위치에 필요한 해시 코드는 git branch -v로 인쇄 할 수 있습니다. 대박!
Audrius Meskauskas

2
우수한. 이것은 한 번 이상 나에게 도움이되었습니다. 명확히하기 위해 -m 플래그는 단일 파일을 가져 오려는 커밋의 해시에 만족하는 것 같습니다.
rd108

1
이것은 나를 위해 일했다. 그래도 원격 브랜치에서 git log를 실행하여 복귀를 찾습니다. 예 : $ git log remotes / origin / master
Dan

6
다른 파일을 가져 오지 않고 특정 파일을 가져올 수 있습니까?
좋은 느낌과 프로그래밍

3
@aleroot <revision>은 무엇을 의미합니까?
와칸 탱카

240

이것을 연구 할 때 방금 생각해 낸 약간 쉬운 방법이 있습니다.

git fetch {remote}
git checkout FETCH_HEAD -- {file}

4
치명적 : 유효하지 않은 참조 : FETCH_HEAD
Antony D' Andrea

4
이 답변에는 실제 사례가 없습니다. 다음에 커밋해야하는지 확실하지 않습니다.
Dr_Zaszuś

@Chris 이미 지점에있는 경우 {remote}가 필요합니까? 그렇다면 왜 그렇습니까?
Cloud Cho

2
pull과 동일하지 않으므로 병합을 시도하므로 pull을 사용하고 싶습니다.
JosephK

22
git checkout master -- myplugin.js

마스터 = 지점 이름

myplugin.js = 파일 이름


되돌릴 수있는 방법이 있습니까?
liyuan

1
) 전 '자식 풀'을 잊지 마세요
맷슨 kepson

16

@Mawardy의 대답은 나를 위해 일했지만 내 변경 사항은 원격에 있었으므로 원점을 지정해야했습니다.

git checkout origin/master -- {filename}

2

예, 과정은 다음과 같습니다.

# 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.