Git에 특정 파일의 특정 버전 을 stdout에 덤프하거나 (또는 in $PAGER
또는 in $EDITOR
) 명령이 있습니까?
git checkout <sha1-of-the-commit-you-need>
, 이후git checkout HEAD
Git에 특정 파일의 특정 버전 을 stdout에 덤프하거나 (또는 in $PAGER
또는 in $EDITOR
) 명령이 있습니까?
git checkout <sha1-of-the-commit-you-need>
, 이후git checkout HEAD
답변:
git show
저장소 루트의 경로 ( ./
또는 ../
상대 경로) 와 함께 사용할 수 있습니다 .
$ git show REVISION:path/to/file
REVISION
실제 수정 버전으로 대체하십시오 (Git 커밋 SHA, 태그 이름, 브랜치 이름, 상대 커밋 이름 또는 Git에서 커밋을 식별하는 다른 방법 일 수 있음)
예를 들어, <repository-root>/src/main.c
4 커밋 전에 파일 버전을 보려면 다음을 사용하십시오.
$ git show HEAD~4:src/main.c
Windows 용 Git 은 현재 디렉토리에 상대적인 경로에서도 슬래시 가 필요합니다 . 자세한 내용은 설명서 페이지를 참조하십시오 git-show
.
날짜별로이 작업을 수행하면 다음과 같습니다.
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt
주의 HEAD@{2013-02-25}
(사용이 저장소에서 "HEAD가 2013년 2월 25일에 있었다"수단 reflog가 ) 없습니다 "지난 역사에서이 지점에 2013년 2월 25일 전에 커밋".
master
대신 유용합니다HEAD@{2013-02-25}
git log --since='2016-04-28 23:59:59 +0100'
?
GUI가 마음에 들면 gitk를 사용할 수 있습니다.
다음과 같이 gitk를 시작하십시오 :
gitk /path/to/file
설명이나 날짜 등 화면 상단에서 수정본을 선택하십시오. 기본적으로 화면 하단에는 해당 "버전"의 차이가 표시됩니다 ( "패치"라디오 버튼에 해당).
선택한 개정판의 파일을 보려면
gitk REVISION /path/to/file
. 예를 들어 특정 버전을 확인하려는 경우에 유용 할 수 있습니다.
명령 으로 commit hash
(종종이라고도 함 commit ID
)을 지정할 수도 있습니다 .git show
git show <commitHash>:/path/to/file
git log /path/to/file
commit hash
등 commit 06c98...
(06c98 ... (가) 해시 커밋 임)commit hash
git show <commitHash>:/path/to/file
사용 하여 명령 을 실행하십시오 .commit hash
path/to/file
참고 :./
상대 경로를 지정할 때를 추가하는 것이 중요 git show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html
합니다.
git show <SHA1> --name-only
하여 가져옵니다.
Jim Hunziker 의 답변 외에도
수정본에서 파일을 다음과 같이 내보낼 수 있습니다.
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt
도움이 되었기를 바랍니다 :)
다음과 같은 스크립트를 사용하여 파일의 모든 버전을 별도의 파일로 덤프 할 수 있습니다.
예 :
git_dump_all_versions_of_a_file.sh path/to/somefile.txt
다른 유사한 질문에 대한 답변으로 여기 에 스크립트를 작성하십시오.
git_root
, git_log_short
및 git_log_message_for_commit
누락되었습니다.
방법 1 : (나는이 방법을 선호한다)
git reflog
git diff-tree --no-commit-id --name-only -r <commitHash>
예 :
git diff-tree --no-commit-id --name-only -r d2f9ba4
// "d2f9ba4"는 "1"의 커밋 ID입니다.
git show <commitHash>:/path/to/file
예 :
git show d2f9ba4:Src/Ext/MoreSwiftUI/ListCustom.swift
// "Src / ..."는 "2"의 파일 경로입니다.
방법 2 :
git reflog
git reset --hard %commit ID%
git reset-하드 c14809fa
주어진 개정판에서 여러 파일을 가져 오는 도우미
병합 충돌을 해결하려고 할 때이 도우미는 매우 유용합니다.
#!/usr/bin/env python3
import argparse
import os
import subprocess
parser = argparse.ArgumentParser()
parser.add_argument('revision')
parser.add_argument('files', nargs='+')
args = parser.parse_args()
toplevel = subprocess.check_output(['git', 'rev-parse', '--show-toplevel']).rstrip().decode()
for path in args.files:
file_relative = os.path.relpath(os.path.abspath(path), toplevel)
base, ext = os.path.splitext(path)
new_path = base + '.old' + ext
with open(new_path, 'w') as f:
subprocess.call(['git', 'show', '{}:./{}'.format(args.revision, path)], stdout=f)
용법:
git-show-save other-branch file1.c path/to/file2.cpp
결과 : 다음은 파일의 대체 버전을 포함합니다.
file1.old.c
path/to/file2.old.cpp
이런 식으로 파일 확장자를 유지하여 편집기가 불평하지 않도록하고 새로운 파일 바로 옆에있는 기존 파일을 쉽게 찾을 수 있습니다.