2013-08-23 221 views
1

我想我犯了一個錯誤。我想刪除一些提交,所以我使用git rebase -i並刪除了最後一次提交。但後來它刪除了我在工作目錄和舞臺上所做的所有更改。怎麼會這樣?如果我刪除了一些較舊的提交,我知道我不會有這個問題。有沒有辦法刪除最後一次提交併將更改保存在我的工作目錄中?git rebase i vs git rebase --onto

順便提一下,使用git rebase -igit rebase --onto <branch name>~<first commit number to remove> <branch name>~<first commit to be kept> <branch name>有什麼區別?

+0

不是「git的重置--soft HEAD〜1」你需要恢復最後一次提交,但保持其與本地更改什麼承諾? – lpapp

回答

1

git rebase如果您對已知文件有未提交的更改,則根本無法啓動。它會失敗,此錯誤:

Cannot rebase: Your index contains uncommitted changes. 

自2007年以來該錯誤的一些變化一直圍繞你怎麼發動git rebase -i呢?

寫道,您的問題與git rebase -i的默認值有關。如果沒有任何參數,它將默認爲檢出分支,並嘗試將其配置爲已配置爲已檢出分支的「上游」的<remote>/<branch>。您可以檢查分支的上游資源庫和分支:

git config branch.<branch_name>.remote 
git config branch.<branch_name>.merge 
+0

所以,我是對的,如果我說刪除最後一個提交'git rebase i'與'git reset --hard HEAD ^'有相同的效果? – user1611830

+0

是的,它們在功能上是等價的,但只有*在一個乾淨的存儲庫中。* HEAD〜1可能更合適。如果'HEAD'是一個合併提交併且你傳遞了'--preserve-merges'參數,我不知道'-i'輸出如何處理第二個父母的顯示。如果您的存儲庫很髒,而且您的工作不受限制,那麼'git reset --hard'會放棄這些更改。另一方面,「git rebase」根本不會啓動。 – Christopher