我用git init
創建一個新的回購,然後做了三個提交。現在我想rebase回去修改我的第一次提交,但如果我這樣做git rebase -i HEAD~3
它抱怨!如果我嘗試與HEAD~2
相同,那麼它有點作用,但只能讓我重新安排最後兩次提交。我如何git rebase第一次提交?
我該如何參考'有任何提交前的提交'或返回並插入一個空提交?
我用git init
創建一個新的回購,然後做了三個提交。現在我想rebase回去修改我的第一次提交,但如果我這樣做git rebase -i HEAD~3
它抱怨!如果我嘗試與HEAD~2
相同,那麼它有點作用,但只能讓我重新安排最後兩次提交。我如何git rebase第一次提交?
我該如何參考'有任何提交前的提交'或返回並插入一個空提交?
簡單的方法,與最近-足夠的git(這已經出來很長時間了,所以你應該有這樣的):
git rebase -i --root
另一種簡單的方法,如twalberg noted in a comment,使用git checkout --orphan
來設置一個新的根提交,您可以複製舊的提交。 (這是rebase -i --root
最終在內部完成的任務。)
據我所知,你不能引用'提交之前有任何提交'。沒有父母的情況下添加提交併不容易。然而,你可以修改初始提交然後選擇原來的回:
$ 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
其實,有了足夠新的'git'版本,你可以'git checkout --orphan newbranch'來創建一個新的分支,它的第一個提交不會有父母......從那裏,一個'git rebase --onto'或者一個一系列'git cherry-pick'(注意,我不認爲'git pick'是一件...)可以用來複制其他非根提交...... – twalberg
Darnit,dup http://stackoverflow.com/questions/11987914/how-do-i-reword-the-very-first-git-commit-message – lxs