Git에서 개별 파일 및 폴더를 이전 버전으로 되돌리는 방법

0
42

Git은 코드베이스의 각 버전을 추적하는 강력한 도구이며 시간을 거슬러 올라가 파일의 이전 버전을 복구해야 하는 경우가 많습니다. Git은 전체 커밋을 되돌리거나 전체 저장소를 재설정할 수 있지만 단일 파일 또는 폴더로 변경 사항을 롤백할 수도 있습니다.

되돌리기 대 재설정

일반적으로 커밋을 “되돌리기”하면 Git은 반대 변경 사항을 적용하는 새 커밋을 적용하여 효과적으로 취소합니다. 이것은 당신이 실수를 해서 그 커밋을 “삭제”해야 하는 경우에 유용합니다. 비록 그것이 히스토리에 여전히 기록되어 있기는 하지만요.

리포지토리를 재설정하는 것은 약간 다릅니다. 한 번에 하나의 커밋만 되돌릴 수 있지만 git reset, Git은 커밋이 생성된 시점으로 저장소의 상태를 완전히 변경합니다. 이것은 일반적으로 커밋을 삭제하거나 분기 기록을 수정하기 위해 여러 가지 이유로 수행됩니다.

이러한 작업은 모두 전체 리포지토리에서 작동하지만 유사한 명령을 사용하여 개별 파일이나 폴더에서 동일한 작업을 수행할 수도 있습니다. 예를 들어, git reset 단일 파일에서 해당 파일을 커밋했을 때의 상태로 되돌립니다. 이것은 Git 기록에서 파일의 이전 버전을 선택하려는 경우에 유용합니다.

관련된: Git Reset은 실제로 어떻게 작동합니까? 소프트, 하드 및 혼합 리셋 설명

관련된: Git 커밋을 수정, 편집 또는 실행 취소하는 방법(Git 기록 변경)

Git에서 이전 버전 보기

파일을 이전 상태로 되돌리는 저기술 솔루션은 매우 간단합니다. Github 및 대부분의 다른 Git 서버는 파일 기록을 추적하고 커밋을 클릭하고 “파일 찾아보기”를 클릭하여 파일을 볼 수 있습니다. 과거의 리포지토리 스냅샷. 그런 다음 파일을 다운로드하거나 텍스트를 복사할 수 있습니다.

이것은 큰 코드 파일로 작업하고 작성한 함수의 이전 버전을 확인하려는 경우에 특히 유용합니다. 이 경우 전체를 되돌리고 싶지 않을 것입니다. 단일 기능만 되돌릴 수 있습니다. Git CLI를 건드리지 않고 해당 함수에서 코드를 복사할 수 있습니다.

Git에서 파일을 이전 버전으로 재설정

이 테스트 저장소에서 README를 편집하고 새 파일을 추가하는 커밋을 만들었습니다. README에 대한 변경 사항을 되돌리고 싶지만 전체 저장소를 초기 커밋으로 재설정하고 싶지는 않습니다.

해결책은 해당 파일의 이전 버전을 체크아웃하여 README만 재설정하는 것입니다. 힘내 checkout 명령은 분기 전환과 같은 많은 작업을 수행하지만 기본적으로 커밋 또는 분기 ID가 지정된 파일을 다운로드하는 데 사용됩니다.

파일을 다시 이전 버전으로 재설정하려면 재설정하려는 시점의 커밋 ID를 찾아야 합니다. 당신이 사용할 수있는 git log 이를 위해 단일 파일로 범위를 지정하여 해당 파일에 수행된 변경 사항만 볼 수 있습니다.

git log README.md

커밋의 ID를 복사한 다음 실행합니다. git checkout ID 및 파일 경로:

git checkout 22710694b25d7ce5297559851beb7d3e4de811bb README.md

이렇게 하면 파일이 다시 변경되지만 아직 변경 사항을 커밋하지는 않습니다. 자유롭게 편집하고 준비가 되면 커밋할 수 있습니다.

이 예에서는 git checkout 다음 커밋을 위해 변경 사항을 준비했습니다. 커밋하지 않으려면 변경 사항을 취소할 수 있습니다. 이것은 Github를 사용하지 않고 임시로 이전 버전의 파일을 다운로드하는 데 유용할 수 있습니다.

단일 파일로 변경 사항 되돌리기

마찬가지로 단일 커밋에서 변경 사항을 되돌리려면 다음을 사용하십시오. git revert. 그러나 단일 파일에 적용할 수 있는 방법은 없지만 커밋이 다른 파일에 영향을 미치는 경우 변경 사항을 무시할 수 있습니다.

사용 --no-commit Git이 자동으로 생성하는 “revert commit”의 편집을 허용하는 플래그.

git revert de8564b131ca6a15a7e7c73f5ef156b119cc0b93

이렇게 하면 되돌리기를 완료하기 전에 파일을 변경할 수 있습니다. 원치 않는 변경 사항이 준비된 경우 클라이언트를 통해 제거하거나 비어 있는 git checkout.

git checkout -- file