不丢失已提交文件的情况下重置系统

28

当我不小心将文件提交到错误的分支时,通常使用 git reset --hard HEAD~1。然而,使用这种方法通常会丢失所有已提交的文件。有没有一种方法可以重置提交,而不会丢失已编辑的文件?

3个回答

55
不要使用--hard,使用--soft代替。因此,如果您想删除最新提交,您需要执行以下操作:git reset --soft HEAD^

@cherrun,同时考虑阅读《重置解析》(http://git-scm.com/2011/07/11/reset.html)。 - kostix
1
总之,使用以下命令: git reset --soft HEAD~1 - VarunPandey
1
“reset demystified”已经迁移。 - jrubins

5
虽然Alex的做法很正确,但我想尝试不同的顺序:
如果我想要提交到一个尚未创建的分支:
git branch newbranch
git reset --hard HEAD^

如果我想在已有的分支上提交:

git checkout otherbranch
git cherry-pick firstbranch
git checkout firstbranch
git reset --hard HEAD^

Alex的答案完整示例

git reset --soft HEAD^
git checkout otherbranch
git commit -am "Message"

请注意,如果“浮动”更改到其他分支失败,导致冲突,则最后一个示例将表现不佳。然后,您需要利用stash/checkout/apply进入冲突解决。

1
很棒的回答!我认为这只是关于丢弃最后一次提交中所做的一些更改并保留另一半。在这种情况下,您只需放弃提交并再次添加要保留的更改即可。在这种情况下,git add --interactive 也可能会有所帮助! - Alexander Oh

2

对于我的情况,我更喜欢使用--mixed,因为在发现这个简单的解释之后,我认为它更合适。

git reset --mixed HEAD^

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接