힘내 로컬 분기 삭제 취소


376

방금 필요한 실험 변경 사항으로 잘못된 분기를 삭제했습니다 git branch -D branchName.

지점을 어떻게 복구합니까?


7
다행 아니에요 알고있는 유일한 절름발이 - 오 이런 짓을 (정기적으로 원격 복사본에 밀어 잊었) 사람
레이

답변:


718

git reflog 를 사용 하여 분기의 마지막 커밋의 SHA1을 찾을 수 있습니다 . 이 시점에서 다음을 사용하여 분기를 다시 만들 수 있습니다

git branch branchName <sha1>

편집 : @seagullJS가 말했듯 이이 branch -D명령은 sha1을 알려주므로 터미널을 닫지 않은 경우 실제로는 쉬워집니다. 예를 들어 다음과 같이 이름이 지정된 분기를 삭제 한 다음 즉시 복원합니다 master2.

user@MY-PC /C/MyRepo (master)
$ git branch -D master2
Deleted branch master2 (was 130d7ba).    <-- This is the SHA1 we need to restore it!

user@MY-PC /C/MyRepo (master)
$ git branch master2 130d7ba

71
Git은 브랜치가 삭제 될 때 SHA1이 무엇이 었는지 알려주므로, 삭제하면 명령 행에 몇 줄이 될 수 있습니다.
seagullJS

이 지점이 서버에 존재하는 경우, 다른 방법으로 사용할 수 있습니다git branch branchName origin/branchName
플로리안 카스텔란

뿐만 아니라 나는이 지점에 커밋 이동 자식 <SHA1> 체리 - 선택 사용하여 종료
아킨 Okegbile

54

지점의 마지막 SHA1을 알고 있다면 시도해 볼 수 있습니다

git branch branchName <SHA1>

여기git reflog 솔루션에 설명 된 SHA1을 사용하여 찾을 수 있습니다 .


34

삭제를 아직 푸시하지 않은 경우 간단히 다음을 수행 할 수 있습니다.

$ git checkout deletedBranchName

이 답변을 통해 Git Extensions는 "누르려고하는 브랜치가이 리모트의 새 브랜치 인 것 같습니다." 고마워
Omer

28

지점을 방금 삭제 한 경우 터미널에 다음과 같은 내용이 표시됩니다.

Deleted branch branch_name(was e562d13)
  • 여기서 e562d13은 고유 ID (일명 "SHA"또는 "해시")이며 삭제 된 분기를 복원 할 수 있습니다.

브랜치를 복원하려면 다음을 사용하십시오.

git checkout -b <branch_name> <sha>

예를 들면 다음과 같습니다.

git checkout -b branch_name e562d13 

4

먼저 : .git 디렉토리를 포함한 전체 디렉토리를 백업하십시오.

둘째 : git fsck --lost-found손실 된 커밋의 ID를 얻는 데 사용할 수 있습니다 .

셋째 : 손실 된 커밋을 리베이스하거나 병합합니다.

넷째 : git과 함께 -D 또는 --force를 사용하기 전에 항상 두 번 생각하십시오. :)

이런 종류의 오류를 복구하는 방법에 대한이 좋은 토론읽을 수도 있습니다 .

편집 : 그건 그렇고, 실행하지 마십시오 git gc(또는 실행하지 마십시오 (예 : 실행하지 마십시오 git fetch).


1
1과 4는 과잉 IMO입니다.
jwg

그렇기 때문에 우리는 git을 사용하여 모든 것을 수행하지 않아도됩니다. 커밋 한 모든 작업을 계속 사용할 수 있습니다.
mateor

4

감사합니다.

자식 분기 new_branch_name sha1

자식 체크 아웃 new_branch_name

// 이전 지점에서 이전에 체크인 한 파일을 볼 수 있음


3

이 단계를 따르세요:

1 : 입력 :

git reflog show 

커밋 히스토리가 모두 표시됩니다. 마지막 커밋이있는 sha-1을 선택해야합니다.

2 : 선택한 Sha-1 ID 로 분기 이름을 작성하십시오 ( 예 : 8c87714).

git branch your-branch-name 8c87714

0

이것은 나를 위해 일했다 :

git fsck --full --no-reflogs --unreachable --lost-found
git show d6e883ff45be514397dcb641c5a914f40b938c86
git branch helpme 15e521b0f716269718bb4e4edc81442a6c11c139
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.