2012-03-22 4 views
5

2 차 커밋을 제거하려고합니다. 이 시점에서 난 그냥 .git 디렉토리를 날려하고 다시 수행하지만이 작업을 수행하는 방법에 궁금 수 ... 내가 삭제 한 이전 커밋,하지만 분명히 결코 2 일 :git : 2 차 커밋을 제거하십시오.

> git log 

commit c39019e4b08497406c53ceb532f99801793205ca 
Author: Me 
Date: Thu Mar 22 14:02:41 2012 -0700 

    Initializing registry directories 

commit 535dce28f1c68e8af9d22bc653aca426fb7825d8 
Author: Me 
Date: Tue Jan 31 21:04:13 2012 -0800 

    First Commit 

> git rebase -i HEAD~2 
fatal: Needed a single revision 
invalid upstream HEAD~2 

> git rebase -i HEAD~1 

는 점에서 나는 내 편집기에서 얻을 :

이제
pick c39019e Initializing registry directories 

# Rebase 535dce2..c39019e onto 535dce2 
# 
# Commands: 
# p, pick = use commit 
# r, reword = use commit, but edit the commit message 
# e, edit = use commit, but stop for amending 
# s, squash = use commit, but meld into previous commit 
# f, fixup = like "squash", but discard this commit's log message 
# x, exec = run command (the rest of the line) using shell 
# 
# If you remove a line here THAT COMMIT WILL BE LOST. 
# However, if you remove everything, the rebase will be aborted. 
# 

내 문제 난 그냥이 2가

답변

5

에서 "모든 것을 제거하면 REBASE이 중단됩니다"이후 커밋 날려 버릴 수 없다는 것입니다 최상위 커밋을 제거하려면 git reset --hard HEAD~을 사용하십시오. Rebase는 다른 커밋들 사이에서 아무 것도 제거하지 않기 때문에 필요하지 않습니다. 이 마지막 커밋 경우

0

, 당신은 할 수 있습니다 : 그렇지 않은 경우

git reset --hard HEAD~ 

을 그리고 마지막 커밋, 다른이 REBASE 목록에이어야 저지하고 2 커밋 제거 할 수 있었을 것입니다 .

1

왜 커밋을 취소 하시겠습니까?

git revert 535dce28f1c68e8af9d22bc653aca426fb7825d8 또는 이 이미 대답 (위) 그러나 새로운 자식에 점에 유의한다 git revert HEAD~1

+0

그 점은 전혀 다른 커밋을 추가하기 때문에 –

+0

어떻게 달라질까요? 변경을 취소하려는 목표가 완료되었습니다. – bluesman

+0

아직 푸시하지 않았기 때문에 "커밋", "이전 커밋 실행 취소"에 대한 요점은 실제로 보이지 않습니다. 당신의 대답은 _wrong_이 아닙니다, 저는 다른 사람들이 더 좋다고 생각합니다 : P –

2

, 당신은 파일에 넣을 수 noop 명령이 있습니다. 틀림없이이 git reset 그냥 쉽게하지 않습니다 아무것도하지 않습니다

$ git rebase -i HEAD^ 
[in editor, change pick line to noop, and write and quit] 
".git/rebase-merge/git-rebase-todo" 15L, 492C written 
Successfully rebased and updated refs/heads/master. 
$ 

을 ...하지만 이미 대화 형 REBASE를 시작했다면, 당신은 당신이 원하는 것을 실현 : 그래서 당신은 noop으로 pick 라인을 대체 할 수 사실 이후에 noop 트릭이 편리합니다.

0

은 또한 다음과 같은 작업을 수행 할 수

git rebase -i --root 

이 루트가 REBASE에 커밋이 포함됩니다. 그런 다음 fixup, squash을 선택하거나 2 차 커밋을 완전히 삭제할 수 있습니다.

관련 문제