2013-08-23 2 views
1

나는 실수했다고 생각합니다. 일부 커밋을 삭제하고 싶었으므로 git rebase -i을 사용하고 마지막 커밋을 삭제했습니다. 그런데 작업 디렉토리와 무대에서 변경 한 모든 것을 삭제했습니다. 어떻게 그럴 수 있죠? 나는 오래된 커밋을 지우면이 문제가 없었 음을 안다. 최종 커밋을 삭제하고 작업 디렉토리에서 변경 사항을 유지하는 방법이 있습니까?git rebase i 대 git rebase --onto

Btw, git rebase -igit rebase --onto <branch name>~<first commit number to remove> <branch name>~<first commit to be kept> <branch name>을 사용하는 경우의 차이점은 무엇입니까?

+0

을 마지막 커밋 되돌릴 수 있지만이 로컬로 변경 유지하기 위해 필요한 커밋? – lpapp

답변

1

git rebase 알려진 파일에 커밋되지 않은 변경 사항이있는 경우 전혀 실행되지 않습니다. 그것은이 오류와 함께 실패합니다 :

그 오류의 일부 변화가 2007 년 이후 주변왔다
Cannot rebase: Your index contains uncommitted changes. 

어떻게 전혀 git rebase -i을 시작 했습니까?

귀하의 질문은 git rebase -i의 기본값과 관련이 있습니다. 인수가 없으면 기본적으로 체크 아웃 된 분기로 넘어 가서 체크 아웃 한 분기의 '업스트림'으로 구성된 <remote>/<branch>에 대해 리베이스합니다. 당신이 지점의 상류 저장소 및 지점 확인하실 수 있습니다 : "자식이 --soft HEAD ~ 1 재설정"되지

git config branch.<branch_name>.remote 
git config branch.<branch_name>.merge 
+0

'git rebase i' 명령으로 마지막 커밋을 삭제하는 것이'git reset -hard HEAD ^'명령과 동일한 효과가 있다고 말하는 것이 옳은가요? – user1611830

+0

예, 그들은 기능상으로 동일하지만 깨끗한 저장소에서만 * HEAD ~ 1이 더 적절할 수 있습니다. 'HEAD'가 병합 커밋이고'--preserve-merges' 인수를 넘겨 주면'-i' 출력이 어떻게 두 번째 부모의 표시를 처리 할 지 확신하지 못합니다. 저장소가 지저분하고 작업을 체크하지 않았다면,'git reset -hard'는 그 변경을 포기할 것입니다. 반면에'git rebase'는 전혀 실행되지 않습니다. – Christopher