以前觉得版本回退这东西应该没什么用,毕竟你新commit的版本肯定要比旧版本优化。
但是实际上比如有时候更改需求,旧版本反而更优。
参考了廖雪峰的博客,学习了怎么进行版本回退
————————————————————————————————————————————————————下面是我平时在使用git(eclipse管理仓库,github博客管理)中遇到过的问题,在网上找到的解决方案(部分内容参考自知乎)
我犯了严重的错误,Git魔法怎么让我回到过去
git reflog
# 你会看到你过去在所有分支上做的所有事情!
# 每一个动作都有一个目录编号:HEAD@{index}
# 找到你犯错之前的那条记录
git reset HEAD@{index}
# 这就是黑魔法,你已经回到犯错之前了
你可以用这个恢复误删的文件,或者,你做了一些修改,结果事情搞得一团糟,你可以秒回之前的状态。如果你做了一次不爽的合并(merge),也可以这样反悔,总之你能瞬间回到事情都还OK的时候。我经常用reflog, 多亏了很多很多很多很多人强烈要求,Git才有了这个功能,向他们致敬一百万次!
我提交了,但想要做一个小修改
# 没问题,你直接先修改好,然后:
git add . # 或添加特定文件
git commit --amend
# 在出现的窗口里,编辑提交说明,或者维持不变
# 现在你最新的提交里已经包含了这个小修改
这种事经常发生,当我提交后,再进行测试或格式检查时,日了狗了(Fuck my life),我在一个等号后面少了一个空格⊙﹏⊙b...其实你也可以把小修改当作一次新的提交,然后用rebase -i把它们合到一块儿,但上面的方法要快一百万倍。
提交说明写错了,怎么修改?
git commit --amend
# 在出现的窗口里编辑提交说明
Git愚蠢的提交说明格式要求。
应该提交给新分支的东西,提交给了主分支
# 从当前状态的主分支上新建一个分支
git branch the-new-branch-name
# 取消主分支上最新的一次提交
git reset HEAD~ --hard
git checkout the-new-branch-name
# 好了,你的提交现在就只在这个新分支上
注意:如果你已经推送到了远程分支,那一切都晚了。无尽的忧桑...另外,如果你已经胡乱做了其他事情,那第二行应该是git reset HEAD@{number},而不是HEAD~,以回到最初犯错的时间和地点。很多很多人推荐了这个简单的方法,感谢你们!
提交到了错误的分支
# 取消最新的提交,然后保留现场原状
git reset HEAD~ --soft
git stash
# 切换到正确的分支
git checkout name-of-the-correct-branch
git stash pop
git add . # 或添加特定文件
git commit -m "你的提交说明"
# 现在你已经提交到正确的分支上了
遇到这种情况,很多人会说用cherry-pick(摘樱桃),像下面这样。不过你自己看吧,哪个舒服用哪个。
git checkout name-of-the-correct-branch
# 把主分支上的最新提交摘过来,嘻嘻~~
git cherry-pick master
# 再删掉主分支上的最新提交
git checkout master
git reset HEAD~ --hard
all