2014-04-10 5 views
17

나는 신선한 repo를 만들기 위해 git init을 사용했다. 그리고 나서 3 번의 커밋을했다. 이제 되돌아 가서 첫 번째 커밋을 수정하기 위해 rebase하고 싶지만, 만약 내가한다면 git rebase -i HEAD~3 불평을합니다! 내가 HEAD~2과 같은 것을 시도한다면 다소 효과가 있지만 마지막 두 커밋 만 재 배열 할 수있게 해준다.첫 번째 커밋을 rebase하려면 어떻게해야합니까?

'커밋이 있기 전에 커밋'을 참조하거나 되돌아 가서 빈 커밋을 삽입하려면 어떻게해야합니까?

+0

Darnit, dup of http://stackoverflow.com/questions/11987914/how-do-i-reword-the-very-first-git-commit-message – lxs

답변

28

쉬운 방법을, 최근-만큼 자식으로 (이 지금은 오랫동안 알아왔다 당신이해야하므로) : 초기을 개정 할 수 있습니다 그러나 원래 다시 선택 후 커밋

git rebase -i --root 

다른 쉬운 방법 는 twalberg noted in a comment, 당신이 위에 이전 커밋을 복사 할 수있는, 새로운 루트 커밋하도록 설정하는 git checkout --orphan을 사용하는 것입니다. (이것은 rebase -i --root이 내부적으로 내부적으로 수행하는 것입니다.)

0

내가 알 수있는 한 '커밋이 있기 전에 커밋'을 참조 할 수 없습니다. 부모없이 커밋을 추가하는 것도 쉽지 않습니다.

$ git log --pretty=oneline 
333333 commit three 
222222 commit two 
111111 commit one 
$ git reset --hard 111111 
$ rm -fr * 
$ git commit -a --amend --allow-empty -m "Initial commit" 
$ git cherry-pick 111111 222222 333333 
$ git log --pretty=oneline 
333333 commit three 
222222 commit two 
111111 commit one 
2c5e01 Initial commit 
+0

실제로 새로운 버전의'자식 (git) '을 사용하면'checkout -orphan newbranch' 명령을 사용하여 첫 번째 커밋에 부모가없는 새 분기를 만들 수 있습니다 ... 거기에서'git rebase --onto' 또는 일련의'git cherry-pick' (NB 나는'git pick'이 일이라고 생각하지 않습니다 ...)은 다른 비 루트 커밋을 복사하는데 사용될 수 있습니다 ... – twalberg