2011-11-04 4 views
5

(참고, 나는 git rebase -i를 찾지 않는다.)자식 커밋을 "다시"열려면 어떻게해야합니까?

수은에, 나는 그것을 내 패치 대기열로 가져 와서 "재실행"할 수있다 :

hg qimport tip 

커밋은 "열려있다". 마치 내가 그것을 저지른 것처럼 느껴진다. hg diff, hg status 등을 되돌릴 수있다. 어떻게해야 할 것인가?

(웹에서 찾은 모든 것은 git rebase -i를 제안하고 을 선택하면를 편집 할 수 있지만 커미션이 같은 방식으로 "열리지"않기 때문에 다릅니다.)

+0

다른 옵션은 거기에 커밋을 남기고 더 많은 것을 변경 한 다음 커밋을 수정 (* git commit --amend')하는 것입니다. – Cascabel

답변

16

당신은 당신의 작업 복사본을 변경하지 않고 머리 포인터를 이동해야합니다. 디폴트는 혼재되어있어 인덱스를 리 셋트 해, hard 옵션은 작업 카피의 커밋 이후에 실제로 변경을 삭제합니다.

HEAD는 항상 현재 참조 (작업 복사본의 부모)를 가리키는 "마술"자식 포인터입니다. 탈자 기호 (^)는 부모를 나타냅니다. 반복적으로 사용할 수 있습니다 (예 : HEAD ^^는 마지막 커밋의 부모를 참조합니다.

+0

위대한 답변, 감사합니다! @wulong처럼 커밋 메시지를 잃어 버렸음을 메모 해 주시겠습니까? –

+0

실제로 반복해서 사용하고 싶다면'HEAD ^^^^^'는'HEAD ~ 5'와 같습니다. (더 정확히 말하면'HEAD'는 현재 체크 아웃 된 커밋을 가리키는 현재 체크 아웃 된 브랜치를 가리키는 심볼릭 심판이고, 브랜치를 체크하지 않은 분리 된 HEAD 상태에 있다면 커밋으로 바로 넘어갑니다 out). – Cascabel

+3

@PaulBiggar : 커밋 메시지를 잃지 않도록하는 것은 재설정하는 대신 수정할 수있는 좋은 이유입니다. 재설정 한 경우에도 간접적으로 확약 메시지를 복구 할 수 있습니다. 'HEAD @ {1}'은 이전에 체크 아웃 된 커밋을 말하며, 커밋되지 않은 경우 커밋 전 커밋이됩니다. 'git commit -c HEAD @ {1}'을 사용하여 커밋 메시지를 시작 위치로 사용할 수 있습니다. (그 이후로 HEAD를 옮긴다면,'git reflog'를 사용하여 reflogs에서 더 먼 곳으로 커밋을 찾을 수 있습니다.) – Cascabel

2

아직하지 않은 가정 원격 저장소로 푸시된다면, git reset --soft HEAD^은 커밋 메시지를 잃어 버리면서 마지막 커밋을 "다시 열"것입니다.

git reset --soft HEAD^ 

재설정 포인터를 이동하고 부드러운 옵션은 파일을 변경하지 않도록 지정 :

2

git commit --amend을 사용하면 동일한 결과를 얻을 수 있습니다.

comparison chart을 (를) 참조하십시오. & 힘내.

관련 문제