2013-03-10 3 views
9

내가 원한다. 이전에 2 커밋으로 돌아가고 싶다면 커밋에서 변경된 파일을 새로운 커밋으로 다시 가져오고 싶을 것입니다. 하지만 나는 내 마지막 커밋을 잃고 싶지 않아. 마지막 커밋은 코드에 몇 가지 실수가 있지만 지금은 그 코드를 유지하고 싶습니다.Git에서 마지막 커밋을 잃지 않고 이전 커밋으로 돌아가는 방법?

나는 약간의 문서를 읽었지만 머리를 다시 세울 때 어떤 일이 일어나는지 분명히하지 않았다. 예를 들어 리셋 할 때까지 모든 커밋을 잃어 버리십니까?

나는이 모든 작동 방식을 이해하려고 노력하고 있지만, revert, resetcheckout 명령에 대해 다소 혼란 스럽습니다.

내가 커밋하지 않고 마지막 커밋을 숨겨 두어야한다는 것을 알았지 만, 지금은 또 다른 이야기입니다.

+1

당신이하고 싶은 일에 대해 좀 더 구체적으로 할 수 할, 현재, 미완성/깨진 일을 풀어 마스터 되감기하지만 싶어? 이전 커밋을 실행 취소 하시겠습니까? 또는 두 파일을 제외하고 두 커밋의 변경 내용 대부분을 유지 하시겠습니까? – jszakmeister

+0

jszakmeister, 나는 커밋을 없애고 싶지 않습니다. 내 과거사를 그대로 유지하고 싶습니다. 나는 새로운 작업 단계로 2 커밋을 되돌리고 싶다. –

+0

"되돌아 오는"것은 무엇을 의미하는지 아직 명확하지 않습니다. – wRAR

답변

9

revert은 이전 커밋의 변경 사항을 되돌 리도록 새 커밋을 만듭니다. reset --hard은 현재 분기의 HEAD를 지정된 커밋으로 변경합니다. checkout은 작업 복사본을 지정된 분기 또는 커밋으로 전환합니다.

이전 커밋으로 분기를 재설정 할 때 새로운 커밋은 다른 분기 나 태그의 조상이 아니기 때문에 손실됩니다 (그래도 그들은 reflog을 통해 액세스 할 수 있습니다).

뭘해야할지 명확하지 않지만 가장 가능성있는 해결책은 revert (오래된 커밋 또는 일련의 커밋을 완전히 되돌리기 위해)과 rebase -i (이전 커밋을 변경하거나 기록에서 삭제)입니다.

+0

''git revert'는 이전 커밋의 변경을 무효화하는 커밋을 생성하기 때문에 강력한 영향을 미칩니다. 자신이 원하는 것을 확신하지 못하면 사용시주의하십시오. – LopSae

+0

@LopSae 만든 커밋이 게시되지 않았으므로 원하지 않는 일을하면 쉽게 제거 할 수 있습니다. 재설정 및 리베이스는 오류 복구가 훨씬 어려워 지므로 훨씬 위험합니다. – wRAR

+0

안녕하세요, @wARAR. 내가 이전 커밋으로 체크 아웃 할 때 커밋 히스토리를보기 위해 git log를 사용하면 다시 커밋 된 모든 레코드가 누락됩니다. 어떻게 해결할 수 있을까요? 전 커밋을 체크 아웃 한 후에 전체 커밋 기록을 봅니다. – Mario

10

다시 돌아가고 싶다면 2가 이전에 커밋한다고 가정하면 git checkout HEAD~2 일 수 있습니다. 그때 그랬던 것처럼 이것은 모두를 얻을 것입니다. 너가 지점 master에 있으면, git checkout master은 현재로 당신을 데려 올 것이다. 그러나 현재 상태를 유지하면서 거기에 새로운 개발 지점을 시작하려면 git checkout -b HEAD~2이 새 지점을 시작합니다. 혹시

git branch wip   # New branch ends a current tip 
git reset --hard HEAD~2 # Old branch rewound, get files from then 
관련 문제