Programing

다른 분기에서 하나의 파일 만 가져 오는 방법

lottogame 2020. 9. 27. 12:39
반응형

다른 분기에서 하나의 파일 만 가져 오는 방법


나는 git을 사용하고 마스터 브랜치에서 일하고 있습니다. 이 분기에는 app.js.

나는 experiment많은 변경과 많은 커밋 을 한 지점이 있습니다. 이제 모든 변경 사항을 app.jsfrom experiment에서 master분기 로 가져오고 싶습니다 .

어떻게하나요?

다시 한번 나는 병합을 원하지 않습니다. 지점 app.js에서 experiment지점으로 모든 변경 사항을 가져오고 싶습니다 master.


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

한 파일의 변경 사항을 실행 취소하는 방법을 참조하십시오 .


2019 년 8 월 업데이트, Git 2.23 : 새로운 git switchgit restore명령을 사용하면 다음과 같습니다.

git switch master
git restore -s experiment -- app.js

기본적으로 작업 트리 만 복원됩니다.
당신은뿐만 아니라 인덱스를 업데이트 할 경우 (파일 내용을 복원 의미 하나의 명령으로 인덱스에 추가)

git restore -s experiment --staged --worktree -- app.js
# shorter:
git restore -s experiment -WS -- app.js

Jakub Narębski 가 주석에서 언급 했듯이 :

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

" Git의 특정 개정판에서 단일 파일을 검색하는 방법 "에 자세히 설명 된 것처럼 repo의 루트 디렉토리에서 전체 경로를 사용해야 한다는 점을 제외하고는 작동 합니다 .
따라서 Jakub의 예제에서 사용한 path / to / app.js입니다.

Frosty 가 주석에서 언급 했듯이 :

가장 최근의 app.js 상태 만 얻을 수 있습니다.

그러나 git checkout또는의 git show경우 SO 질문 " git checkout revision of a file in git gui "에 설명 된대로 원하는 개정판을 실제로 참조 할 수 있습니다 .

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

$ FILENAME은 버전이 지정된 파일 전체 경로 입니다.

$REVISION다음과 같이 표시 될 수 있습니다 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

등등.

schmijos주석에 추가합니다 .

숨김에서이 ​​작업을 수행 할 수도 있습니다.

git checkout stash -- app.js

이것은 두 개의 브랜치에서 작업하고 있고 커밋하고 싶지 않은 경우 매우 유용합니다.


모든 것이 훨씬 간단하므로 git checkout을 사용하십시오.

you're on master분기를 가정하고 분기를 얻으려면 다음을 app.js from new-feature수행하십시오.

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

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

그러면 원하는 파일의 내용이 표시됩니다. 항상 그렇듯이 새로운 기능 브랜치 이름 대신 sha1의 일부를 사용 하여 해당 특정 커밋에있는 파일을 가져올 수 있습니다.


VonC 및 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

또는

git checkout experiment -- app.js

git checkout branch_name file_name

예:

git checkout master App.java

지점 이름에 마침표가 있으면 작동하지 않습니다.

git checkout "fix.june" alive.html
error: pathspec 'fix.june' did not match any file(s) known to git.

또는 다른 분기의 모든 파일을 원하는 경우 :

git checkout <branch name> -- .

github에서 파일을 검토하고 거기에서 가져옵니다.

이것은 OP에 직접 응답하지 않는 실용적인 접근 방식이지만 일부는 유용하다고 생각합니다.

문제의 브랜치가 GitHub에있는 경우 GitHub에서 제공하는 여러 도구 중 하나를 사용하여 원하는 브랜치 및 파일로 이동 한 다음 'Raw'를 클릭하여 일반 텍스트를보고 (선택적으로) 텍스트를 복사하여 붙여 넣을 수 있습니다. 원하는.

I like this approach because it lets you look at the remote file in its entirety before pulling it to your local machine.


If you want the file from a particular commit (any branch) , say 06f8251f

git checkout 06f8251f path_to_file

for example , in windows:

git checkout 06f8251f C:\A\B\C\D\file.h


git checkout master               -go to the master branch first
git checkout <your-branch> -- <your-file> --copy your file data from your branch.

git show <your-branch>:path/to/<your-file> 

Hope this will help you. Please let me know If you have any query.

참고URL : https://stackoverflow.com/questions/2364147/how-to-get-just-one-file-from-another-branch

반응형