새 이름으로 파일의 이전 버전을 git-valuing합니다.
"파일을 가지고 있습니다.main.cpp
내 편집기에서 열립니다.
"의 이전 개정판을 보고 싶습니다.main.cpp
편집장에서도.
제가 지금 하는 방법은 이렇습니다.
close "main.cpp" in the editor
prompt> mv main.cpp tmp
prompt> git checkout HEAD^ main.cpp
prompt> mv main.cpp old_main.cpp
prompt> mv tmp main.cpp
prompt>
open "main.cpp" and "old_main.cpp" in the editor
편집기에서 "main.cpp"를 닫을 필요가 없도록 단순화할 수 있습니까?
제가 바라는 것은 변형된 것입니다.git-checkout
할 수 있는 일입니다.
업데이트: 저는 macosx 10.5.7에서 git를 사용하고 있습니다.
prompt> git --version
git version 1.6.0.4
prompt>
업데이트 2: Jakub Narębski 답변:
prompt> git show HEAD^:dir1/dir2/dir3/main.cpp > old_main.cpp
prompt>
업데이트 3: 특정 개정에 대한 Karmi의 답변:
prompt> git show 4c274dd91dc:higgs/Higgs.xcodeproj/project.pbxproj > old_project.pbxproj
prompt>
사용할 수 있습니다.git show
이를 위해:
git show HEAD^:main.cpp > old_main.cpp
(콜론이 있음에 유의하십시오.:
사이의 문자HEAD^
그리고.main.cpp
.) 그<revision>:<path>
구문은 "수정기호 지정" 섹션의 마지막 지점 옆에 있는 git rev-parse man 페이지에 설명되어 있습니다.
<rev>:<path>
,예.HEAD:README
,:README
,master:./README
접미사
:
경로 뒤에 콜론 앞에 있는 부분에서 이름을 지정한 트리 모양 개체의 지정된 경로에 있는 블롭 또는 트리 이름을 지정합니다.:path
(콜론 앞에 빈 부분이 있음)은 다음에 설명하는 구문의 특수한 경우입니다. 즉, 지정된 경로의 인덱스에 내용이 기록됩니다.다음으로 시작하는 경로./
또는../
는 현재 작업 디렉터리에 상대적입니다.지정된 경로는 작업 트리의 루트 디렉터리에 상대적으로 변환됩니다.이것은 작업 트리와 동일한 트리 구조를 가진 커밋 트리에서 블로브 또는 트리를 지정하는 데 가장 유용합니다.
참고:<path>
프로젝트의 상위 디렉터리에 대한 전체 경로입니다. 즉, 다음과 같은 디렉터리입니다..git/
디렉터리. (더 정확하게는, 일반적으로 임의의 <트리-이시>, 즉 트리를 나타내는 것일 수 있는 "<리비전>"으로)
현재 디렉토리에 상대적인 경로를 사용하려면 다음을 사용해야 합니다../<path>
구문(또는)../path
현재 디렉터리에서 위로 이동).
2015-01-15 편집: 상대 경로 구문에 대한 정보 추가
대부분의 경우 로우 레벨(플럼핑)을 사용하여 동일한 출력을 얻을 수 있습니다.git cat-file
명령:
git cat-file blob HEAD^:main.cpp > old_main.cpp
Jakub의 대답에 덧붙이자면: 출력을 파일로 리디렉션할 필요조차 없습니다.>
터미널의 파일 내용을 스킴하는 데만 관심이 있다면,그냥 도망쳐도 돼요$ git show 58a3db6:path/to/your/file.txt
.
단일 파일 사용 사례
다음을 포함한 일관된 체크아웃 동작을 얻기 위해autocrlf
등, 보조 폴더(예: TEMP)를 사용하고 이전/다른 폴더에서 파일 상태를 복원합니다.<commit>
다음과 같이:
git --work-tree TEMP/ restore main.cpp -s <commit>
mv TEMP/main.cpp old_main.cpp
별칭을 사용하여 한 줄 명령으로 만들기
git restore-as old_main.cpp main.cpp -s <commit>
별칭 만들기:
git config --global alias.restore-as "!f() { git --work-tree /tmp/ restore $2 $3 $4 $5 $6 && mv -iv /tmp/$2 $1; }; f"
의 대체품)/tmp/
이한작위예예디렉토리약된해을업러예▁reserved(:리▁directory토디▁with)를 합니다./tmp/gitmv
생성한 후.)
참고:
git show <commit>:main.cpp > old_main.cpp
저장소에서 원시 읽기만 생성합니다.
두 번째 작업 트리 사용 - 연결 또는 익명
장기 병렬 작업 트리(주 작업 트리가 있는 저장소에 링크됨/알려짐)는 git-work 트리(git v2.6.7 이후 새로 추가됨)를 통해 사용할 수 있으며 다른 분기에 HEAD를 둘 수 있습니다.<commit>
:
git worktree add [<options>] <new-worktree-path> [<commit-ish>]
는 초기체크아웃 될 수 .--no-checkout
) 및 그 이후sparse-checkout
한 개별 파일을 도 있습니다.git restore -s <commit> <file(s)/sub-dir>
"HEAD"를 입력하기만 하면 익명 를 수 ..git
이 담긴 내용으로 .
gitdir: <MAIN-REPO-WORKTREE>/.git
저는 @kxr의 답변을 직장으로 받지 못했습니다.그리고 저는 이것이 더 간단하다고 생각합니다.
# Rename the current file.
mv path/to/file.txt path/to/file_current.txt`
# Checkout some other version of that file.
git checkout <commit> -- path/to/file.txt
이는 다음을 사용하는 허용된 답변보다 더 좋습니다.git show
보이지 않는 캐릭터를 보존하기 때문입니다.
참고: 위의 코드에서는 원래 파일 이름을 유지하는 파일의 "다른 버전"이며, 현재 파일은 이름을 변경해야 합니다.
한 줄로 이 작업을 수행하는 Git 별칭이 있습니다.이 명령은 실제로 현재 파일이 원래 파일 이름을 유지하도록 합니다.
restore-as = "!mv $1 $1_tmp && git checkout $3 -- $1 && git restore --staged $1 && mv $1 $2 && mv $1_tmp $1 #"
(필요한 이유는 여기를 참조하십시오.#
그러면 다음과 같은 용도로 사용할 수 있습니다.git restore-as path/to/file.txt path/to/file_old.txt <commit>
언급URL : https://stackoverflow.com/questions/888414/git-checkout-older-revision-of-a-file-under-a-new-name
'programing' 카테고리의 다른 글
두 집합의 결합이 모든 항목을 포함하지는 않습니다. (0) | 2023.05.01 |
---|---|
MongoDB가 이렇게 빠른 이유 (0) | 2023.05.01 |
문자열에서 마지막 문자를 제거합니다.속어 (0) | 2023.05.01 |
안드로이드 프로젝트에서 외부 JAR을 사용하려면 어떻게 해야 합니까? (0) | 2023.05.01 |
Xcode MyProjectName-Bridging-Header.h가 존재하지 않습니다. (0) | 2023.05.01 |