git-svn提交修改出错时的恢复办法

来源:互联网 发布:软件怎么发布 编辑:程序博客网 时间:2024/05/01 21:31

目前ThinkNet还在使用一个集中的SVN版本库,接下来我们将逐渐将代码库迁移到git服务器上。

我本地已经开始使用GIT作为主要的版本管理工具,使用GIT-SVN进行本地版本库和服务器版本库的同步。一直使用的很好。前两天因为网络不稳定,导致有一次dcommit代码中途发生网络连接错误。并且git无法自动回滚到提交前的状态。查看本地代码库时,发现自己的一大批修改不翼而飞。顿觉天昏地暗~

git的稳定性和安全性在版本管理工具中中颇受好评,理应不出现这样的问题。一通Google和尝试后,成功的恢复了所有的修改。现将修改记录如下,方便遇到相同问题的同学参考。


-=-=-=-=-=-=-=-=-=-=- 补救方法正文的分割线 -=-=-=-=-=-=-=-=-=-=-=-=-=-


打开你本地代码库根目录下的‘.git/log/HEAD’文件,在其中找到你本地的最后一次提交,并记录下这次提交的hash值。如下图中红色16进制数字部分:

00f741d223a3db473be53cb1a88a8a3309184f64 dbfbc9b3ef9328ee4c63520d241beb8e027df779 Simon Yang <simon@thinknet.com> 1360842004 +0800     commit: 修复查找环的算法,确保两点间有多条线相连或一个点形成闭环的情况下算法错误。
dbfbc9b3ef9328ee4c63520d241beb8e027df779 33376856ff7a30bd008e67351fa99eed3f6de949 Simon Yang <simon@thinknet.com> 1360890032 +0800     commit: 调整查找环的算法,使用边的集合表示环,而不是点。因为两个点之间可能有多个边相连.
58ae5dddaf114c08a7b834e1702d2729c2d64952 358247740c329c5edc8f764080f40e1aad93ca6f Simon Yang <simon@thinknet.com> 1360942854 +0800     commit: 修改判断浏览器的方法,避免QT JS崩溃。
358247740c329c5edc8f764080f40e1aad93ca6f 0041469dc09a815dd7b0164b7043f1224954fab4 Simon Yang <simon@thinknet.com> 1361018342 +0000     checkout: moving from master to 0041469dc09a815dd7b0164b7043f1224954fab4^0
f0eced5c872b2eda5d4c8bec6d1a3314f2fe4bab 008f69e8e4d0c9ebba9e9bfb07c0e48e7178cf09 Simon Yang <simon@thinknet.com> 1361018367 +0000     rebase: 修复查找环的算法,确保两点间有多条线相连或一个点形成闭环的情况下算法错误。
008f69e8e4d0c9ebba9e9bfb07c0e48e7178cf09 a238ce2fcba10c777c2a79867dca94c5d3068db9 Simon Yang <simon@thinknet.com> 1361018369 +0000     rebase: 调整查找环的算法,使用边的集合表示环,而不是点。因为两个点之间可能有多个边相连.
00ac36a4df9c6bc0a0dc6eaa6e97ac3e9a316e4d 5106c92fdf871a20235845849b3eb05f0564b8fc Simon Yang <simon@thinknet.com> 1361018378 +0000     rebase: 修改判断浏览器的方法,避免QT JS崩溃。
5106c92fdf871a20235845849b3eb05f0564b8fc 5106c92fdf871a20235845849b3eb05f0564b8fc Simon Yang <simon@thinknet.com> 1361018378 +0000     rebase finished: returning to refs/heads/master
5106c92fdf871a20235845849b3eb05f0564b8fc e8ec0389ab91c2a806314b1477f9c3581b954f4b Simon Yang <simon@thinknet.com> 1361018420 +0000     reset: moving to refs/remotes/trunk
e8ec0389ab91c2a806314b1477f9c3581b954f4b c705522a88e29d330fdd5829f083cab62401655a Simon Yang <simon@thinknet.com> 1361018441 +0000     reset: moving to refs/remotes/trunk

你的最后一次提交一般应该是commit动作产生的,不要误用了rebase。
为了确保你查找的记录正确,你可以使用下面的命令查看该次提交的内容。
git show 358247740c329c5edc8f764080f40e1aad93ca6f

确定记录后,可以使用下面的命令回滚到你的最后一次提交。
git reset --hard 358247740c329c5edc8f764080f40e1aad93ca6f 

然后重新rebase svn的修改并dcommit
git svn rebase
git svn dcommit

如果中间再次出现错误,可以重复上面的动作。已经提交到svn库中的修改,下一次dcommit时不会再次提交。

原创粉丝点击