2014-04-10 205 views
17

我用git init創建一個新的回購,然後做了三個提交。現在我想rebase回去修改我的第一次提交,但如果我這樣做git rebase -i HEAD~3它抱怨!如果我嘗試與HEAD~2相同,那麼它有點作用,但只能讓我重新安排最後兩次提交。我如何git rebase第一次提交?

我該如何參考'有任何提交前的提交'或返回並插入一個空提交?

+0

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

回答

28

簡單的方法,與最近-足夠的git(這已經出來很長時間了,所以你應該有這樣的):

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'版本,你可以'git checkout --orphan newbranch'來創建一個新的分支,它的第一個提交不會有父母......從那裏,一個'git rebase --onto'或者一個一系列'git cherry-pick'(注意,我不認爲'git pick'是一件...)可以用來複制其他非根提交...... – twalberg