2012-01-27 3 views
17

업데이트가있는 다른 지점을 체크 아웃 한 다음 몇 가지 사항을 변경하고 기본 git으로 전환하면 변경 사항이 사라졌습니다! 내가 돌려받을 수 있을까? 터미널은 기본적으로했다 :'분리 헤드 상태'에서 커밋을 복구하는 방법은 무엇입니까?

$ git commit 
[detached HEAD 7c09e17] Fixed some stuff 
    files changed, insertions(+), deletions(-) 
$ git push master 
fatal: 'master' does not appear to be a git repository 
fatal: The remote end hung up unexpectedly 
$ git checkout master 
Previous HEAD position was 7c09e17... Fixed some stuff 
Switched to branch 'master' 
$ git merge theother/directory 
+0

http://stackoverflow.com/questions/4845505/gitx-how-do-my-detached-head-commits-back-into-master? – smparkes

답변

30

는 마스터에서 아직도 가정 :

git merge 7c09e17 

은 충분합니다. git은 보통 터미널을 볼 때 커밋 ID를 알려주는 데 좋습니다.

+0

체크 아웃 마스터, 자식 병합 7c09e17, 자식 체크 아웃 마스터, 자식 강제로, 그것을 해결하는 것, 감사합니다! – NoBugs

+0

호기심에서 내 로컬 컴퓨터에서 이러한 모든 커밋을 보거나 취소 할 수있는 방법이 있습니까? – NoBugs

+8

@NoBugs, 매달려있는 모든 커밋 (지점에없는 커밋)을보고 싶다면'git fsck --unreachable --no-reflogs'를 원한다고 생각합니다. –

7

나는 과 비슷하다. 문제가있다. 나는 생명의 은인이 git reflog 인 것을 알았다. 경우는 여기에, 그것을 사용 설명하는 데 도움이 출력입니다 :

e3191c5 [email protected]{0}: checkout: moving from ec31ccf0735240d0cdc5a44fd443039c3caa43f0 to master 
ec31ccf [email protected]{1}: commit: Added code and data for simulation. 
781b9ee [email protected]{2}: checkout: moving from 3bd804e635b913840c71b7f8a33665460580d45f to 781b 
3bd804e [email protected]{3}: checkout: moving from master to 3bd804 

내 상황이 있다는 점에서 약간 달랐다 내가 커밋 분리 된 HEAD 상태에서 아주 오래부터 시작하는 동안 커밋 만들었다.

master에 (I 이되어 있었다 곳이다, 일명 ec31ccf) 단순히 ec31ccf0735240d0cdc5a44fd443039c3caa43f0를 병합하고 싶었다면, 나는 git merge ec31ccf 생각이나 git rebase ec31ccf는 일을했을 수도 있습니다. 그러나 이것은 내 경우에 병합 충돌 등을 포함한 대부분의 고대 역사를 병합합니다.

그 대신에, 나는 단지 내가 수행 한 작업을 ec31ccf에서 복구하려고하고 git cherry-pick ec31ccf은 정상적으로 작동했습니다.

관련 문제