질문 : Git의 특정 개정판에서 단일 파일을 검색하는 방법은 무엇입니까?
Git 저장소가 있고 몇 달 전에 일부 파일이 어떻게 생겼는지보고 싶습니다. 나는 그날 개정판을 찾았다. 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8
입니다. 하나의 파일이 어떻게 생겼는지 확인하고 ( "새") 파일로 저장해야합니다.
gitk
사용하여 파일을 볼 수 있었지만 저장할 수있는 옵션이 없습니다. 명령 줄 도구로 시도했는데 가장 가까운 것은 다음과 같습니다.
git-show 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8 my_file.txt
그러나이 명령은 파일 내용이 아닌 diff를 표시합니다. PAGER=cat
과 같은 것을 사용하고 출력을 파일로 리디렉션 할 수 있다는 것을 알고 있지만 실제 파일 콘텐츠를 얻는 방법을 모르겠습니다.
기본적으로 svn cat 과 같은 것을 찾고 있습니다.
답변
자신의 대답을 완성하기 위해 구문은 실제로
git show object
git show $REV:$FILE
git show somebranch:from/the/root/myfile.txt
git show HEAD^^^:test/test.py
이 명령은 일반적인 수정 스타일을 사용하므로 다음 중 하나를 사용할 수 있습니다.
팁 git show
"를 사용할 때 항상 현재 디렉토리 위치가 아닌 저장소 루트의 경로를 지정 한다는 점을 기억하는 것이 중요합니다.
( Mike Morearty 가 적어도 git 1.7.5.4에서는 경로 ./
"를 넣어 상대 경로를 지정할 수 있다고 언급했지만, 예를 들면 다음과 같습니다.
git show HEAD^^:./test.py
)
Git 2.23+ (2019 년 8 월)에서는 혼란스러운 git checkout
명령 을 대체 git restore
git restore -s <SHA1> -- afile
git restore -s somebranch -- afile
그것은 작업 트리에서 "소스"( -s
) 커밋 SHA1 또는 분기 somebranch
있는 파일 만 복원합니다.
인덱스도 복원하려면 :
git restore -s <SHA1> -SW -- afile
( -SW
: --staged --worktree
)
git1.5.x 이전에는 몇 가지 배관 작업이 수행되었습니다.
git ls-tree <rev>
커밋 내에서 하나 이상의 'blob'객체 목록 표시
git cat-file blob <file-SHA1>
특정 개정 내에서 커밋 된 파일을 cat으로 지정합니다 (svn cat과 유사). git ls-tree
를 사용하여 주어진 file-sha1의 값을 검색합니다.
git cat-file -p $(git-ls-tree $REV $file | cut -d " " -f 3 | cut -f 1)::
git-ls-tree
$REV
개정판에서 $file
에 대한 객체 ID를 나열합니다. 이것은 출력에서 잘라내어 git-cat-file
git-cat-object
라고 불리며 단순히 덤프합니다. 그 객체를 stdout
.
참고 : Git 2.11 (Q4 2016)부터 git cat-file
출력에 콘텐츠 필터를 적용 할 수 있습니다.
참조 3,214,594 커밋 , 7bcf341 커밋 (2016 9월 9일)를 7bcf341 커밋 (2016 년 9 월 09), 및 b9e62f6 커밋 , 16dcc29 커밋 에 의해 (2016년 8월 24일를) 요하네스 Schindelin ( dscho
) .
(합병 : Junio C gitster
- gitster-in commit 7889ed2 , 21 Sep 2016)
git config diff.txt.textconv "tr A-Za-z N-ZA-Mn-za-m <"
git cat-file --textconv --batch
참고 : " git cat-file --textconv
"는 최근 (2017)에 segfaulting을 시작했으며 Git 2.15 (2017 년 4 분기)에서 수정되었습니다.
Jeff King ( peff
)의 commit cc0ea7c (2017 년 9 월 21 일)를 참조하십시오.
(Merged by Junio C gitster
- gitster-in commit bfbc2fc , 28 Sep 2017)
출처 : https://stackoverflow.com/questions/610208/how-to-retrieve-a-single-file-from-a-specific-revision-in-git
'개발관련 > Git' 카테고리의 다른 글
현재 Git 작업 트리에서 로컬 (추적되지 않은) 파일을 제거하는 방법 (0) | 2021.07.14 |
---|---|
Git : 기존 폴더에 "git clone"하는 가장 좋은 방법 (0) | 2021.07.13 |
이미 디스크에서 삭제 된 Git 리포지토리에서 여러 파일 제거 (0) | 2021.07.12 |
Git push error '[remote rejected] master -> master (branch is currently checked out)' 오류 (0) | 2021.07.12 |
'git'이 내부 또는 외부 명령으로 인식되지 않는 오류 (0) | 2021.07.08 |