如果不小心commit了一个不需要commit的文件,可以对其进行撤销。
先使用
日志信息显示如下:
1 | WARNING: terminal is not fully functional |
2 | commit 197634d80f1aca2fefd4bb93ffb64bbf2af5bc1e |
3 | Author: /****hidden****/ |
4 | Date: Thu Jun 27 14:23:52 2013 +0800 |
8 | commit f093b6ed512f761a346e2e5c0f00230e448c217c |
9 | Author: /****hidden****/ |
10 | Date: Thu Jun 27 14:05:23 2013 +0800 |
本次由于添加了错误的yii框架版本,因此需要将第二次的提交强制撤销。
找到需要回退的那次commit的 哈希值,
1 | f093b6ed512f761a346e2e5c0f00230e448c217c |
执行
1 | git reset --hard f093b6ed512f761a346e2e5c0f00230e448c217c |
使用上面的命令进行回退
上述命令执行成功之后,会彻底返回到回退到的版本状态,新发生的变更将会丢失。
对于部分发生了变更,但是变更部分的文件夹存在未提交的文件可能导致目录非空而删除失败,此时需要自行处置
完成之后,使用 –force 或 -f 参数强制push(本地分支和远程分支都是 develop)
1 | git push develop develop --force |
如果你使用 TortiseGit 工具的话,它应该是不具备 reset 支持的,至少我没找到。所以 reset 操作只能在命令行模式下进行。
如果你工作在 SSH 的公钥模式下,命令行操作可能比较麻烦,我暂时不知道如何将公钥带进来提交,因为我的 gitolite服务不允许密码的,呵呵
查找了一些疑似文档,可能需要将自己的公钥添加到用户目录下的.ssh的认证文件中,未测试~~~
此时可以使用 TortiseGit 工具选择 push,并在弹出的窗口选择 force 的复选框,提交对应的分支或者全部提交,如下图:
![QQ截图20130627163141](http://www.miss77.net/wp-content/uploads/2013/06/QQ%E6%88%AA%E5%9B%BE20130627163141.png)