etc./StackOverFlow

Git으로 파일의 이전 버전을 보려면 어떻게 해야 합니까?

청렴결백한 만능 재주꾼 2022. 1. 6. 11:11
반응형

질문자 :mike


Git에 특정 파일의 특정 버전을 볼 수 있는 명령이 있습니까(stdout에 덤프되거나 $PAGER 또는 $EDITOR



저장소의 루트(상대 경로 지정의 경우 ./ 또는 ../ git show 를 사용할 수 있습니다.

 $ git show REVISION:path/to/file

REVISION 을 실제 개정판으로 바꿉니다(Git 커밋 SHA, 태그 이름, 분기 이름, 상대 커밋 이름 또는 Git에서 커밋을 식별하는 다른 방법일 수 있음).

예를 들어, 4 커밋 전의 <repository-root>/src/main.c 파일 버전을 보려면 다음을 사용하십시오.

 $ git show HEAD~4:src/main.c

Windows용 Git은 현재 디렉토리에 상대적인 경로에서도 슬래시가 필요합니다. git-show 매뉴얼 페이지를 확인하십시오.


mipadi

커밋이 지난 90일 이내에 발생한 경우 날짜별로 이 작업을 수행하면 다음과 같습니다.

 git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt

HEAD@{2013-02-25} 는 이 저장소(reflog 사용)에서 "HEAD가 2013-02-25에 있었던 위치"를 의미하며 "역사상 이 분기에서 2013-02-25 이전의 마지막 커밋"을 의미합니다.

이것은 중요합니다! 이는 기본적으로 이 방법이 지난 90일 이내의 기록에 대해서만 작동함을 의미합니다. 그렇지 않으면 다음을 수행해야 합니다.

 git show $(git rev-list -1 --before="2013-02-26" HEAD):./fileInCurrentDirectory.txt

Jim Hunziker

GUI가 마음에 들면 gitk를 사용할 수 있습니다.

  1. 다음과 같이 gitk를 시작하십시오.

     gitk /path/to/file
  2. 화면 상단에서 개정판을 선택하십시오(예: 설명 또는 날짜 기준). 기본적으로 화면 하단에는 해당 개정의 diff가 표시됩니다("패치" 라디오 버튼에 해당).

  3. 선택한 개정에 대한 파일을 보려면:

    • "나무" 라디오 버튼을 클릭하십시오. 그러면 해당 개정에서 파일 트리의 루트가 표시됩니다.
    • 파일로 드릴다운합니다.

Trausti Kristjansson

git show 명령을 commit hash (종종 commit ID 라고도 함)를 지정할 수도 있습니다.


간단히 말해서

git show <commitHash>:/path/to/file


단계별로

  1. git log /path/to/file 을 사용하여 주어진 파일에 대한 모든 변경 사항의 로그를 표시합니다.
  2. 도시 변화의 목록에서, 상기 쇼 commit hash 등을 commit 06c98... ((가) 해시 커밋되고 ... 06c98)를
  3. commit hash 복사
  4. 명령 실행 git show <commitHash>:/path/to/file (가)하여 commit hash 단계 3을 & path/to/file 단계 1.

참고: ./ 추가하는 것이 중요해 보입니다(예: git show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html .


Adrien Be

Jim Hunziker 의 답변 외에도

리비전에서 파일을 다음과 같이 내보낼 수 있습니다.

 git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt

도움이 되었기를 바랍니다 :)


Ijas Ameenudeen

파일의 이전 버전과의 차이점을 빠르게 확인하려면:

git show -1 filename.txt > 파일의 마지막 개정판과 비교

git show -2 filename.txt > 두 번째 마지막 개정판과 비교

git show -3 fielname.txt > 마지막 세 번째 마지막 개정판과 비교


sachin_ur

git log -p 는 커밋 로그뿐만 아니라 각 커밋의 차이점도 보여줍니다(병합 커밋 제외). 그럼 당신은 누를 수 / , 파일 이름과 키를 눌러 입력 enter . 다음/이전 항목으로 이동하려면 n 또는 p 를 누르십시오. 이렇게 하면 파일의 변경 사항뿐만 아니라 커밋 정보도 볼 수 있습니다.


sanbor

방법 1: (나는 이 방법을 선호하며, 커밋되지 않은 데이터를 잃을 가능성이 없음)

  1. 다음을 사용하여 커밋 ID 찾기: git reflog

  2. 커밋에서 파일 나열 git diff-tree --no-commit-id --name-only -r <commitHash>

    예시:

    git diff-tree --no-commit-id --name-only -r d2f9ba4
    d2f9ba4 는 1단계의 커밋 ID입니다.

  3. 다음 명령으로 필요한 파일을 엽니다.

    git show <commitHash>:/path/to/file

    예시:

    git show d2f9ba4:Src/Ext/MoreSwiftUI/ListCustom.swift
    Src/... 는 2단계의 파일 경로입니다.


방법 2: (커밋되지 않은 데이터를 잃을 가능성)

  1. 다음을 사용하여 커밋 ID 찾기: git reflog

  2. 이 커밋을 하드 리셋: git reset --hard %commit ID%

    예시:

    git reset --hard c14809fa

  3. 필요한 사항을 변경하고 필요한 분기에 새 커밋을 수행합니다.


Andrew

다음과 같은 스크립트를 사용하여 파일의 모든 버전을 별도의 파일로 덤프할 수 있습니다.

 git_dump_all_versions_of_a_file.sh path/to/somefile.txt

다른 유사한 질문에 대한 답변으로 여기에 스크립트를 가져 옵니다.


Brad Parks

주어진 개정판에서 여러 파일을 가져오는 도우미

병합 충돌을 해결하려고 할 때 이 도우미는 매우 유용합니다.

 #!/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)

GitHub 업스트림 .

용법:

 git-show-save other-branch file1.c path/to/file2.cpp

결과: 다음에는 파일의 대체 버전이 포함되어 있습니다.

 file1.old.c path/to/file2.old.cpp

이렇게 하면 편집자가 불평하지 않고 새 파일 바로 옆에 있는 이전 파일을 쉽게 찾을 수 있도록 파일 확장자를 유지합니다.


Ciro Santilli 新疆再教育营六四事件法轮功郝海东

출처 : http:www.stackoverflow.com/questions/338436/how-can-i-view-an-old-version-of-a-file-with-git

반응형