2009-08-30 5 views
2

MSYSGIT 기록 브라우저를 사용하여 특정 커밋을 체크 아웃했습니다. 이것은 실수였습니다. 파일을 보려고했는데, 파일을보기 위해 파일을 확인해야한다고 생각했습니다.GIT의 체크 아웃 실행 취소

그 이후로 나는 원격 리포 (GITHub에서)로 더 이상 커밋을 할 수 없었습니다. 나는 어느 정도 이해하지만, 전적으로는 아닙니다. [체크 아웃의 작동 방식을 완전히 이해하지 못했다는 점에 대해서는 멍청한 마음으로하십시오.]

어떻게 체크 아웃을 실행 취소하고 이전 상태로 되돌릴 수 있습니까?

'체크 아웃'커밋을 마우스 오른쪽 버튼으로 클릭하면 '이 분기 제거'옵션이 표시됩니다. 윌 그 커밋의 파일을 삭제 [나쁜] 아니면 그냥 체크 아웃을 취소 할 수 있습니까? 내가 틀린 나무를 짖고 있니?

답변

7

내 이해는 실수로 이전 커밋을 체크 아웃 한 다음 보관하려는 커밋을 새로 커밋했다는 것입니다. 첫째, 당신이 당신의 현재 작업에 대한 포인터를 가지고 있는지 확인 : 다음

git checkout -b newbranch 

, 전에 있었다 체크 아웃 :

git checkout master 

는 희망이 당신의 주류 분기에 다시 넣을 것입니다 그리고 당신은 GitHub의에 밀어 수 있습니다 정상적으로. 당신은 다음의 변경을 끌어하려면 다음 병합 할 수 있습니다와 (당신이 행복하면) 임시 지점을 삭제 :

git merge newbranch 
git branch -d newbranch 
+0

전체 newbranch를 병합하지 않으려는 경우 git cherry-pick 단일 커밋을 사용할 수도 있습니다. – Benno

+0

또한 다른 사람이 원격 마스터에 커밋을 추가 한 경우 마스터를 원격지로 푸시 할 수 없습니다. 그럴 경우 'git pull'을하고 그 후에 'git push'가 작동해야합니다. –

+0

좋은 직장! 그랬어! [비록 질문이 그렇게 명확하지는 않지만.) 여전히 궁금한 점이 있습니다. msysgit 히스토리 브라우저에서 "이 지점 제거"를 눌렀다면 무슨 일이 일어 났을까요? 파일을 삭제 했습니까? 아니면 모든 파일이 그 파일 다음에 만들어 졌습니까? – SamGoody

0

분기는 기본적으로 C++ 용어로 포인터입니다.

다른 커밋을 가리 키도록 분기를 옮길 수도 있습니다. 이를 위해 git reset을 사용하십시오.

git checkout mybranch 
git reset mypreviouscommit 

이 커밋은 삭제되지 않지만, mybranch "포인트"mypreviouscommit을한다. 그래서 에 있었던 것은 master입니다.

+0

올바르게 이해했는지 확인하려면 - 체크 아웃 된 커밋이 2e968f이고 그 이후로 다른 커밋 인 2a45b0이 추가되었습니다. 이제는 "git reset 2e968f"를 수행해야하며, 나는 엉망이되기 전에, 커밋을 체크 아웃하지 않고, 2a45b0가 최신 정규 커밋이되도록해야합니다. – SamGoody

+0

재설정을 시도하면 오류가 발생했습니다. 치명적 : '2e968fd7bf2018680856316e3133c610284d9619'개체를 구문 분석 할 수 없습니다. 도와주세요. – SamGoody

-1

당신은 당신이 만든 모든 변경 사항을 잃어버린 괜찮다면 GitHub의 마지막 풀 있기 때문에, 당신은 단순히 신선한, 새에 디렉토리 및

git clone ... 

을 삭제할 수 있습니다.

+1

나는 다른 커밋을 잃어 버릴 염려가 있지만 마음에 두는 것이 좋습니다. BTW, 저는 GIT에서이 태도를 매우 자주 봅니다. (예를 들어, 오늘이 논평을 보았습니다. "흥미롭고, 내가 주기적으로 주인과 포크를 재현하기 때문에 그 문제에 직면 한 적이 없었습니다. 기부금의 그러나 어이 ... "[GIT 사용의 실용 불가능의 아주 슬픈 반영?!] – SamGoody