> 웹 프론트엔드 > CSS 튜토리얼 > 리플 로그를 사용하여 잃어버린 커밋을 복원합니다

리플 로그를 사용하여 잃어버린 커밋을 복원합니다

尊渡假赌尊渡假赌尊渡假赌
풀어 주다: 2025-03-17 09:28:10
원래의
360명이 탐색했습니다.

리플 로그를 사용하여 잃어버린 커밋을 복원합니다

이 기사는 "Advanced Git"시리즈의 일부입니다. 트위터에서 우리를 팔로우하거나 뉴스 레터에 가입하여 향후 기사를 살펴보십시오!

Git의 "Reflog"기능은 거의 알려져 있지 않지만 매우 실용적입니다. 어떤 사람들은 이것을 "안전망"이라고 부르며 나는 그것을 git의 "일기"라고 생각하는 것을 선호합니다. GIT는 헤드 포인터의 모든 움직임 (즉, 모든 커밋, 병합, Rebase, Pick, Reset 등)을 기록하는 데 사용하기 때문입니다. GIT는 리플 로그에 액션을 기록하여 귀중한 로그 북이되고 문제가 발생할 때 좋은 출발점이됩니다.

이 "Advanced Git"시리즈의 마지막 부분에서는 git loggit reflog 의 차이점을 설명하고 Reflog를 사용하여 삭제 된 커밋 및 삭제 된 가지를 복구하는 방법을 보여 드리겠습니다.

고급 GIT 시리즈 :

  • 1 부 : Git에 완벽한 커밋을 만듭니다
  • 2 부 : Git의 분기 전략
  • 파트 3 : 풀 요청을 통한 더 나은 협업
  • 4 부 : 합병 충돌
  • 5 부 : 기본 및 합병 변경
  • 6 부 : 대화식 기본 변경
  • 7 부 : GIT에서 제출물을 선택하십시오
  • 8 부 : 리플 로그를 사용하여 잃어버린 커밋 복구 ( 지금 여기 있습니다! )

git log 또는 git reflog : 차이점은 무엇입니까?

이전 게시물에서는 git log 명령을 사용하여 이전 이벤트를 확인하고 Commit History를 볼 것을 제안했습니다. 이것이 바로 그 일입니다. 그것은 현재 머리와 조상, 즉 부모, 다음 부모 등을 표시합니다. 통나무는 각 커밋의 부모를 재귀 적으로 인쇄하여 커밋 기록의 시작 부분으로 거슬러 올라갑니다. 저장소의 일부이므로 밀거나 가져 오거나 당기면 복사됩니다.

반면에 git reflog 는 개인 작업 공간 관련 레코드입니다. 그것은 조상 목록을 반복하지 않습니다. 대신, 과거에 헤드가 가리키는 모든 커밋 목록을 표시합니다. 그렇기 때문에 워드 프로세서, 텍스트 편집기 등에서 볼 수있는 것처럼 일종의 "실행 취소 기록"으로 생각할 수 있습니다.

이 로컬 레코드는 기술적으로 저장소의 일부가 아니며 커밋과 별도로 저장됩니다. 리플 로그는 .git/logs/refs/heads/ 파일로 각 지점의 로컬 커밋을 추적합니다. Git의 일기는 일반적으로 90 일 후에 청소되지만 (기본값), 리플 로그의 만료 날짜를 쉽게 조정할 수 있습니다. 일수를 180으로 변경하려면 다음 명령 만 입력하십시오.

 $ git config gc.reflogexpire 180.days.ago
로그인 후 복사

또는 리플 로그가 만료되지 않을 것이라고 결정할 수 있습니다.

 $ git config gc.reflogexpire never
로그인 후 복사

팁 : GIT는 저장소의 구성 파일 ( .git/config ), 글로벌 사용자 구성 ( $HOME/.gitconfig ) 및 시스템 전체 설정 ( /etc/gitconfig )을 구별합니다. 사용자 또는 시스템의 반사기 만료 날짜를 조정하려면 --system 또는 --global 매개 변수를 위에 표시된 명령에 추가하십시오.

충분한 이론적 배경 - git reflog 사용하여 오류를 수정하는 방법을 보여 드리겠습니다.

삭제 된 커밋을 복구하십시오

다음 시나리오를 상상해보십시오. 커밋 기록을 본 후 마지막 두 커밋을 삭제하기로 결정하십시오. 당신은 용감하게 git reset 실행했고, 두 커밋은 커밋 역사에서 사라졌습니다 ... 잠시 후 당신은 이것이 버그라는 것을 알았습니다. 당신은 방금 귀중한 변화를 잃고 공황을 시작했습니다!

처음부터 시작해야합니까? 필요하지 않습니다. 다시 말해 : 침착하고 git reflog 사용하십시오!

그러니 일을 엉망으로하고 실수로 실수를하자. 다음 이미지는 타워의 원래 커밋 기록 (그래픽 git 클라이언트)을 보여줍니다.

우리는 두 커밋을 삭제하고 마스터 브랜치의 마지막 개정판으로 변경 및 인쇄물 제목 커밋 (ID : 2B504BEE)을 설정하려고합니다. 해시 ID를 클립 보드에 복사 한 다음 명령 줄에서 git reset 사용하고 해시 값을 입력합니다.

 $ git Reset -Hard 2B504bee
로그인 후 복사

바라보다! 제출이 사라졌습니다. 이제 이것이 오류라고 가정하고 잃어버린 데이터를 복구하기 위해 리플 로그를 살펴 보겠습니다. 터미널에서 저널을 볼 수 있도록 git reflog 입력하십시오.

모든 항목은 시간 순서로 정렬됩니다. 이것은 최신 커밋이 맨 위에 있습니다. 그리고 자세히 살펴보면 몇 분 전에 맨 위에 치명적인 git reset 작업이 알 수 있습니다.

일기가 효과가있는 것 같습니다. 좋은 소식입니다. 따라서이를 사용하여 마지막 작업을 취소하고 재설정 명령 전에 상태를 복원하겠습니다. 이전과 마찬가지로 해시 ID (이 특정 예에서 E5B19E4)를 클립 보드에 복사하십시오. git reset 다시 사용할 수 있으며 이는 완벽하게 작동합니다. 그러나이 경우에는 이전 상태를 기반으로 새 지점을 만들 것입니다.

 $ git branch 해피 앤딩 e5b19e4
로그인 후 복사

그래픽 git 클라이언트를 다시 살펴 보겠습니다.

보시다시피, Happy-Ending이라는 새로운 지점이 이전에 삭제 된 커밋으로 만들어졌습니다.

다른 예를 살펴보고 리플 로그를 사용하여 전체 지점을 복원합시다.

삭제 된 가지를 복구하십시오

다음 예제는 첫 번째 시나리오와 유사합니다. 우리는 무언가를 삭제합니다. 고객이나 팀 리더가 기능 지점을 삭제하라고 말하면 스스로 청소하는 아이디어 일 수도 있습니다. 더 나쁜 것은, 커밋 (그림의 C3)은 다른 지점에 포함되지 않으므로 데이터를 잃어 버리고 있습니다.

실제로 이것을하고 나중에 지점을 복원합시다.

feature/login 브랜치를 삭제하기 전에 남겨 두어야합니다. (스크린 샷에 표시된대로 현재 헤드 브랜치이므로 git에서 헤드 브랜치를 삭제할 수 없습니다.) 따라서 지점을 (마스터)로 전환 한 다음 feature/login 삭제합니다.

좋아요… 이제 우리의 고객이나 팀 리더가 그의 마음을 바꾸 었다고 가정 해 봅시다. 결국 feature/login 브랜치 (커밋 포함)가 필요합니다. 우리는 무엇을해야합니까?

Git의 일기를 살펴 보겠습니다.

 $ git 리플 로그
776f8ca (Head -> Master) Head@{0} : Checkout : 기능/로그인에서 마스터로 이동
B1C249B (피처/로그인) HEAD@{1} : 체크 아웃 : 마스터에서 피처/로그인으로 이동합니다
[...]
로그인 후 복사

우리는 다시 운이 좋은 것으로 판명되었습니다. 마지막 항목은 feature/login 에서 마스터로 전환하는 방법을 보여줍니다. 이전 상태로 돌아가 해시 ID B1C249B를 클립 보드에 복사하십시오. 다음으로 필요한 상태를 기반으로 feature/login 이라는 분기를 작성합니다.

 $ git branch 기능/로그인 B1C249B
$ git branch -vv
  기능/로그인 B1C249B 변경 IPRINT 페이지 제목
* 마스터 776f8ca 제목 및 삭제 오류 페이지에 대한 변경 사항
로그인 후 복사

대단한 - 지점은 죽음에서 회복되며 우리가 잃어버린 소중한 커밋도 포함합니다.

타워와 같은 데스크탑 GUI에서 GIT를 사용하는 경우 오류를 입력 할 때 CMD Z를 텍스트 편집기 또는 워드 프로세서처럼 눌러 마지막 작업을 취소 할 수 있습니다.

침착하고 추적하십시오

Git 's Reflog는 진정한 구세주가 될 수 있습니다! 보시다시피, 무덤이나 전체 지점에서 누락 된 커밋을 제거하는 것은 매우 쉽습니다. 리플 로그에서 올바른 해시 ID를 찾기 만하면 나머지는 케이크 조각입니다.

고급 GIT 도구를 파헤치려면 자유롭게 (무료!) 고급 GIT 툴킷을 확인하십시오. 분기 전략, 대화식 레바 제, 리플 로그, 서브 모듈 등과 같은 주제에 대한 짧은 비디오 모음입니다.

이것은 CSS- 트릭에 대한 "Advanced Git"시리즈의 마지막 부분입니다. 이 기사를 즐겼기를 바랍니다. 행복한 해커!

고급 GIT 시리즈 :

  • 1 부 : Git에 완벽한 커밋을 만듭니다
  • 2 부 : Git의 분기 전략
  • 파트 3 : 풀 요청을 통한 더 나은 협업
  • 4 부 : 합병 충돌
  • 5 부 : 기본 및 합병 변경
  • 6 부 : 대화식 기본 변경
  • 7 부 : GIT에서 제출물을 선택하십시오
  • 8 부 : 리플 로그를 사용하여 잃어버린 커밋 복구 ( 지금 여기 있습니다! )

위 내용은 리플 로그를 사용하여 잃어버린 커밋을 복원합니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿