2010-03-29 2 views
11

내 역사를 가정 그런 식으로 진행됩니다 - B - C -git 재설정을 사용하여 이전 changeset으로 이동 한 후 역사에서 마지막 커밋으로 돌아가는 방법은 무엇입니까?

A ~ D (마스터)

내가 git reset B을 할 경우에, 나는 거있어 :

A - B (마스터)

문제는 이제 git log이 (가) A에서 B까지의 기록만을 보여 주므로 더 이상 C와 D를 볼 수 없습니다.

어떻게하면 D로 돌아갈 수 있습니까?

답변

20

git reflog으로 D를 볼 수 있어야합니다.

이 부분은 article for instance을 참조하십시오.

실제로 커밋이 삭제되는 유일한 시간은 gc --prune을 사용하는 경우입니다 (따라서주의해야합니다!). 이 라인은 나눌 수 있습니다

c5c3a82... [email protected]{0}: pull origin featureB: Merge made by recursive. 
49d0608... [email protected]{1}: reset --hard HEAD^: updating HEAD 
3ed01b1... [email protected]{2}: pull origin featureA: Merge made by recursive. 
49d0608... [email protected]{3}: pull origin bugfixJ: Merge made by recursive. 
854d44e... [email protected]{4}: commit: Add more cowbell to foo.c 
6dbc22d... [email protected]{5}: pull origin bugfixI: Merge made by recursive. 
9bdb763... [email protected]{6}: commit: Remove weevils 
8518f9d... [email protected]{7}: checkout: moving from wickedfeature to master 

: 당신이 저장소에 지금 자식 reflog를 실행하면 당신이 일한지

,이 같은 모양 많은 변화를 볼 수 있습니다 아래 4 개 부분으로 :

  • 커밋 해시,
  • 커밋 포인터,
  • 액션,
  • 및 추가 정보

우리가 [email protected]{1}에 잃어버린 커밋을 되찾고 싶다면, 단지 git reset --hard [email protected]{2} 일 수 있습니다.
재설정하기 전에 현재 분기 (및 작업 복사본)가 저장소 상태로 설정됩니다.

상태가 무엇인지보고 싶다면 git checkout -b temp [email protected]{2} (또는 git 1.5.0 이상인 경우 git checkout [email protected]{2})을 사용할 수 있습니다.

+1

그 말 그대로 내 목숨을 구해 줬습니다. – Nitroware

0

좋아, 찾았습니다.

git reflog을 사용할 수 있습니다.

나는 그것이 무엇을위한 것인지 몰랐다. 그러나 이제는 HEAD가 가리키고있는 모든 참조의 로그임을 알 수있다.

관련 문제