2013-08-23 188 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