2014-03-12 2 views
10

커밋을했지만 지금은 내가 무엇을 바꿨는지 알기가 어렵습니다. 나는 물론 git diff를 할 수는 있지만 마지막 커밋을 실행 취소하고 모든 변경 사항을 그대로 유지하여 내 IDE (PyCharm)가 어떤 파일이 변경되었는지 간단히 보여줍니다.git에서 마지막 커밋을 실행 취소하는 방법, 내 변경 사항을 unstaged 상태로 유지 하시겠습니까?

그래서 마지막 커밋을 실행 취소 (실제로 제거) 할 수 있지만 여전히 내 변경 사항을 적용 할 수 있습니까? 모든 팁을 환영합니다!

--soft 
    Does not touch the index file nor the working tree at all 
    (but resets the head to <commit>, just like all modes do). 
    This leaves all your changed files "Changes to be 
    committed", as git status would put it. 

그래서이 취소 커밋하지만 파일은 여전히 ​​전과 길을 찾아 :

+2

작은 점 : 당신은 정말로 git 히스토리로부터 커밋하지 않습니다. 오히려 포인터 (즉, 가지)를 제거합니다. 결국 그들은 쓰레기 수거됩니다. 무언가를 엉망으로 만들고 다시 돌아가고 싶다면'reflog'에서 매달려있는 커밋을 찾을 수 있습니다. –

답변

8

이 누구의 도움 (git help reset) git reset --soft에 대한 작업, 같은 소리하면이 말한다. 아무 것도 색인에 상연되지 않습니다.

+0

방금'git reset --soft'를 실행했지만,'git hist'를 실행하면 여전히 저의 마지막 커밋이 보입니다. 그래서 나는 이것이 내 문제에 대한 해결책이 아니라고 생각한다. 다른 아이디어? – kramer65

+1

커밋은 아직 기록에 있지만 'HEAD'는 더 이상 가리 키지 않습니다. 그것은 매달려 참조이며 가비지 수집됩니다. –

+1

팁으로; 마지막으로'git reset --soft '을 수행하여 성공했습니다. 그걸 삽입하면 마침내 해결되었습니다. 어쨌든 고마워! – kramer65

2

피터 (Peter)가 말한 것처럼 git reset --soft으로 가면 색인과 작업 디렉토리가 그대로 유지됩니다.

1 커밋으로 돌아가려면 git reset --soft HEAD~을 사용하여 현재 HEAD의 상위 커밋에서 분기를 가리킬 수 있습니다. 색인 및 작업 디렉토리에는 여전히 변경된 파일이 포함됩니다. 리셋에 대한

편리한 기사 : http://git-scm.com/blog/2011/07/11/reset.html

4

내가 다른 두 답변의 --soft을 떠나 git reset --mixed @^로 기본 설정됩니다, (자식의 이전 버전 또는 git reset HEAD^) 간단한 git reset @^와 함께 갈 것입니다. 차이점은 소프트 재설정은 커밋을 위해 파일을 준비 상태로 남겨 둡니다. 이는 사용자가 원하는 것처럼 들리지 않습니다. 정말로 커밋을 취소하고 싶다면, 아마도 디폴트가하는 변경 사항을 unstage해야한다. 소프트 리셋보다 일반적인 경우에 훨씬 유용하다는 것을 알았습니다. 아마도 혼합이 기본값 인 이유 일 것입니다.

+0

이것은 받아 들여진 대답 일 것입니다 - 더 간단하고 정확하게 OP가 원했던 것. – chetstone

관련 문제