Git Reflog – 병합되지 않은 삭제 된 분기를 복구하는 방법



Git Reflog에 대한이 문서는 Git Reflog의 도움으로 Git에서 삭제 된 분기를 복원하는 방법에 대한 포괄적 인 가이드입니다.

“ 'release'브랜치 또는 'main'브랜치에서 소스 코드가 아직 병합되지 않은 브랜치를 분실 한 적이 있습니까? 작업이 이미 메인 브랜치에 병합되었지만 삭제 된 브랜치를 재생성하려면 어떻게해야합니까?” . 음, 그러한 시나리오에 대한 유일한 해결책은 Reflog 이동 .

Git Reflog에 대한이 기사를 통해 도움을 드리겠습니다.분기에 대한 작업이 손실 될 수있는 시나리오와 분기를 복구하는 방법을 이해합니다.또한이 기사에서는 대규모 프로젝트에서 작업하는 동안 분기의 의도하지 않은 손실을 방지하기 위해 취할 수있는 접근 방식을 강조합니다.





    1. Git Reflog 란 무엇입니까?
    2. 브랜치는 언제 어떻게 삭제 되나요?
    3. 삭제 된 분기 복구
    4. 삭제 된 분기가 복구되면 어떤 작업이 복원됩니까?
    5. Git Reflog 하위 명령

이제이 기사를 시작하겠습니다.



시나리오를 고려하십시오, maintainer는 다른 공동 작업자의 많은 기능 분기를 병합 한 다음 결국 삭제해야하지만 작업이 병합되기 전에 실수로 분기가 삭제됩니까?

글쎄요,이 글로 넘어 가기 전에 Git에서는 불가능하다고 말씀 드리겠습니다. 안전하고 수표 게시물로 작동하면 그렇게 할 수 없습니다. 그래서 여기에 Git Reflog가 등장합니다.

Git Reflog 란 무엇입니까?

그만큼‘reflog’명령은 추적 참조의 모든 단일 변경 (분기 또는 태그) 저장소의 로그 기록을 유지하고 로컬에서 생성되었거나 체크 아웃 된 분기 및 태그의 로그 기록을 유지합니다. 브랜치가 생성 또는 복제되었을 때의 커밋 스냅 샷, 체크 아웃, 이름 변경 또는 브랜치에서 수행 된 커밋과 같은 참조 로그는 ‘reflog’명령으로 나열됩니다.



노트 : 분기가 로컬 저장소에 존재하는 경우에만 작업 디렉토리에서 복구 할 수 있습니다. 브랜치는 로컬 리포지토리의 원격 리포지토리에서 Git이 참조 기록 로그를 저장하기 위해 로컬 리포지토리에서 생성되었거나 체크 아웃되었습니다.

이 명령은 손실 된 분기가있는 저장소에서 실행되어야합니다. 고려한다면원격 리포지토리 상황에서 분기가있는 개발자의 컴퓨터에서 reflog 명령을 실행해야합니다.

명령: 퇴각하다

이제 Git Reflog가 무엇인지 알았습니다.병합 된 분기와 병합되지 않은 분기를 모두 삭제하고 Git이 어떻게 처리하는지 확인하십시오.

1 단계 : 마스터에 병합 된 분기 나열

먼저‘ 석사 다음 명령을 사용하여 다른 분기에있는 경우’분기 :

$ git 체크 아웃 마스터

산출

Git Checkout Master-Git Reflog-Edureka

이제 병합 된 분기 목록을 가져 오려면 다음 명령을 언급하십시오.

$ git 브랜치 --merged

산출:

1.1 단계 : 그런 다음 병합 된 분기를 삭제합니다.

$ git branch -d issue # 902

산출:

‘issue # 902’브랜치는 이미‘마스터’브랜치에 병합되었으므로 성공적으로 삭제되었습니다.

2 단계 : 이제 마스터에 병합되지 않은 분기를 나열하겠습니다.

$ git branch --no-merged

산출

2.2 단계 : 마지막으로 다음 명령을 사용하여 병합되지 않은 분기를 삭제하겠습니다.

$ git branch -d prepod

완료되지 않은 작업이있는 브랜치 중 하나를 삭제하려고하면 'preprod'브랜치가 표시됩니다. git은 경고 메시지를 표시합니다.

산출

이제 Git Reflog에서이 기사를 통해 데이터를 복구하는 방법을 설명하기 전에 분기가 삭제 될 때 정확히 어떤 일이 발생하는지, 어떤 상황에서 분기를 복구 할 수 있는지 알려 드리겠습니다.

브랜치는 언제 어떻게 삭제 되나요?

Git이 분산 버전 관리 시스템 (DVCS), 저장소의 복제본 또는 사본이있는 모든 시스템은 둘 다 역할을합니다. 마디 그리고 바퀴통 . 이각 시스템이 전체 저장소 코드 및 히스토리의 자체 사본을 갖게됨을 의미합니다.말할 필요도없이 당신은 나누는 다른 사람과의 작업 및 출판 똑같다.

따라서 이러한 시나리오에서는 많은 기여자가 대규모 프로젝트에서 작업하는 실제 시나리오에서 분기가 삭제되는 3 가지 경우가있을 수 있습니다. 다음과 같은 경우가있을 수 있습니다.

사례 1 – 개발자는 분기를 병합하거나 삭제할 수 있습니다.

개발자가 기능 분기를 기본 분기에 로컬로 병합 한 다음‘ 자식 브랜치 ’명령에“- ”플래그는 이전 스크린 샷에서 볼 수 있습니다.

명령: ‘git branch -d branch_name’

또한 개발자가 브랜치의 변경 사항을 삭제하기로 결정하고 다음 명령을 사용하여 다른 브랜치와 병합하지 않고 브랜치를 삭제하기로 결정할 수도 있습니다.

명령: ‘git branch -D branch_name’

위의 명령으로 개발자는git 경고를 재정의하는 분기를 강제로 삭제하십시오.

$ git branch -D preprod

산출

노트 : 'git branch'명령을 실행할 때 'preprod'브랜치가 더 이상 나열되지 않습니다. 그래서 y이 분기에 저장된 작업은 손실됩니다.

사례 2 – 개발자가 공유 저장소에서 분기를 삭제합니다.

읽기 / 쓰기 권한이있는 개발자가 다음과 같은 방법으로 원격 분기를 강제로 삭제하려고하는 시나리오를 고려하십시오.‘–delete’플래그와 함께‘git push’명령을 사용합니다.

$ git push origin --delete quickfix

산출

이 외에도 권한이 없거나 악의적 인 사용자가 강제로 원격 분기를 삭제하도록하는 경우가있을 수 있습니다.이 경우 관리자는 개발자가 삭제 한 'quickfix'브랜치를 복구 할 수 있습니다.이전에이 지점을 확인했습니다. 이 시나리오에서 로컬 저장소에는 여전히 참조 로그가 있습니다.

메인테이너가 브랜치를 복구 할 수없는 경우 브랜치를 삭제 한 브랜치의 소유자는 로컬 리플 로그에서 복구해야합니다.

사례 3 – 수퍼 권한이있는 후크 스크립트가 분기를 삭제합니다.

이것은 드물지만 특정 git 작업 이벤트에서 후크 스크립트가 트리거되고 아직 병합되지 않은 분기를 강제로 삭제하는 가능한 시나리오입니다. 당신은 할 수 있습니다위에서 언급 한 명령 중 하나가 sudo 권한이있는 후크 스크립트에서 스크립팅되는 것을 고려하십시오.

이제 분기를 삭제할 때 어떤 일이 발생하는지 알았으므로 Git Reflog에 대한이 기사를 계속 진행하고 손실 된 분기를 복구하는 방법을 살펴 보겠습니다.

Git Reflog를 사용하여 삭제 된 분기 복구

1 단계 : 모든 참조의 역사 로그

이 저장소의 모든 참조 (‘master’,‘uat’및‘prepod’)에 대해 기록 된 모든 로컬 기록 로그 목록을 가져옵니다.

퇴각하다

2 단계 : 역사 스탬프 식별

위의 스냅 샷에서 참조 할 수 있듯이 강조 표시된 커밋 ID : e2225bb HEAD 포인터 인덱스와 함께 : 4재판매 ’분기는 최신 작업을 가리키는 현재 HEAD 포인터에서 생성되었습니다.

3 단계 : 다시 덮다

복구하려면 '재판매 ‘분기는 명령을 사용합니다.색인 ID – 4로 HEAD 포인터 참조를 전달하는 'git checkout'출력 스크린 샷에서 강조 표시된 'preprod'브랜치가 생성 된 긴 커밋 ID의 포인터 참조입니다.

git checkout -b preprod HEAD @ {4}

산출

그리고 짜잔! ‘ 재판매 '분기는 모든 소스 코드와 함께 복구됩니다.

노트 : 나에게 b위에서 사용 된 'git checkout'명령을 정리하고 이해하는 데 도움이됩니다.

‘git checkout’명령은 오버로드 된 명령입니다 (Java 오버로드 된 함수와 마찬가지로). 실제 분기가 복구되는 부분입니다.

자바 스크립트를 사용하여 HTML의 진행률 표시 줄

이 단일 명령은 먼저 다음이 가리키는 이전 기록 타임 스탬프를 확인합니다. HEAD @ {4} 포인터 그런 다음 '-b'옵션을 사용하여 'preprod'라는 이름의 분기를 만들고 작업 디렉토리를 새로 만든 분기로 전환합니다.

이는 전환 된 분기가 출력 화면에 표시된대로 '마스터'에서 '사전 제작'으로 전환됨을 의미합니다.이제 분기 모델에 따라 '마스터'또는 '릴리스'분기와 병합 할 수 있습니다.

이제 분기를 복원하는 방법을 알았으니 삭제 된 분기가 복구 될 때 어떤 작업이 복원되는지 알려 드리겠습니다.

삭제 된 분기가 복구되면 어떤 작업이 복원됩니까?

숨김 색인 목록에 숨겨져 저장된 파일은 다시 복구됩니다. 추적되지 않은 파일은 모두 손실됩니다. 또한 나는항상 작업을 준비하고 커밋하거나 숨기는 것이 좋습니다.

특정 분기 또는 태그의 로그 참조를 가져 오려면 'git reflog'명령을 실행하십시오.

예 : 'uat'분기의 로그 참조 만 확인하려면 'git reflog uat'명령을 사용하십시오.

Git Reflog 하위 명령

퇴각하다

매뉴얼 페이지를 여는 명령

$ git reflog --help

산출

퇴각하다 보여 주다

명령 줄에 제공된 참조의 로그를 표시합니다.

git reflog show master @ {0}

퇴각하다 내쉬다

이 명령은 이전 reflog 항목을 정리하는 데 사용됩니다.

git reflog 만료

퇴각하다 지우다

이 명령은 reflog 기록에서 단일 항목을 삭제합니다.

자식 reflog 삭제

퇴각하다 존재

이 명령은 ref (분기 또는 태그)에 reflog – 로그 기록 항목이 있는지 확인합니다.

git reflog가 존재합니다.

위에서 언급 한 명령 외에도“Git Reflog”명령은 위에서 언급 한 하위 명령에 따라 다양한 하위 명령과 다른 옵션을 사용합니다. 추가 읽기를 위해“ git reflog –help 터미널 창에서.

이것으로 우리는 Git Reflog에 대한이 기사를 끝냅니다.DevOps의 의도는 팀 간의 커뮤니케이션과 협업을 강화하는 동시에 더 나은 품질의 소프트웨어를 더 빠르고 안정적으로 만드는 것입니다. 이 기사에 흥미가 있다면 c 도대체 전 세계에 250,000 명 이상의 만족 한 학습자 네트워크를 보유한 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 Edureka DevOps 인증 교육 과정은 학습자가 DevOps가 무엇인지 이해하고 Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack 및 GIT와 같은 다양한 DevOps 프로세스 및 도구에 대한 전문 지식을 습득하여 SDLC의 여러 단계를 자동화하는 데 도움이됩니다.

질문이 있으십니까? 'Git Reflog'기사의 댓글 섹션에 언급 해 주시면 최대한 빨리 연락 드리겠습니다.