您的位置:首页 > 其它

解决SVN误操作--使用Git仓库中恢复已删除的分支、文件或丢失的操作

2017-02-22 14:12 976 查看
timtiandeiMac:WelfareManager timtian$ git branch recover_branch[tzfhead] 99fbfd5
fatal: 'recover_branch[tzfhead]' is not a valid branch name.
timtiandeiMac:WelfareManager timtian$ git reflog
warning: refname 'HEAD' is ambiguous.

bc9ef04 HEAD@{0}: checkout: moving from HEAD to master
bc9ef04 HEAD@{1}: checkout: moving from master to HEAD
bc9ef04 HEAD@{2}: pull origin master: Fast-forward
c68c172 HEAD@{3}: checkout: moving from HEAD to master
bc9ef04 HEAD@{4}: checkout: moving from master to HEAD
c68c172 HEAD@{5}: checkout: moving from 183b72cad197d43a950de25782a453a98b04e2af to master
183b72c HEAD@{6}: pull origin master: Merge made by the 'recursive' strategy.
99fbfd5 HEAD@{7}: commit (merge): 22222
6af9894 HEAD@{8}: commit: 111
17c48b3 HEAD@{9}: commit: 4
f472172 HEAD@{10}: commit: 分享渠道,编辑框架
9e9f0b0 HEAD@{11}: commit: E方案方案列表,商品选择、商品反馈
9533669 HEAD@{12}: revert: Revert "二维码文字"
e161dc0 HEAD@{13}: checkout: moving from master to e161dc01746cd0a855465373b57115fbf7368a4d
c68c172 HEAD@{14}: pull origin master: Merge made by the 'recursive' strategy.
8690099 HEAD@{15}: checkout: moving from ef76dc3c813ae8e091a14b0ffe06e161eb3a3c9e to master
ef76dc3 HEAD@{16}: checkout: moving from master to ef76dc3c813ae8e091a14b0ffe06e161eb3a3c9e
8690099 HEAD@{17}: commit: pod SHA
c43c452 HEAD@{18}: commit: pod

> 恢复到指定id  文件 通过git branch recover_branch[新分支] commit_id 来建立一个新的分支

timtiandeiMac:WelfareManager timtian$ git branch recover_branch[tzf11] 99fbfd5
fatal: 'recover_branch[tzf11]' is not a valid branch name.
timtiandeiMac:WelfareManager timtian$ git branch tzf11 99fbfd5
fatal: A branch named 'tzf11' already exists.
timtiandeiMac:WelfareManager timtian$ git branch tzf11 99fbfd5
timtiandeiMac:WelfareManager timtian$


在使用Git的过程中,有时可能会有一些误操作

比如:执行checkout -f 或 reset -hard 或 branch -d删除一个分支

结果造成本地(远程)的分支或某些commit丢失

可以通过reflog来进行恢复,前提是丢失的分支或commit信息没有被git gc清除

一般情况下,gc对那些无用的object会保留很长时间后才清除的

reflog是git提供的一个内部工具,用于记录对git仓库进行的各种操作

可以使用git reflog show或git log -g命令来看到所有的操作日志

恢复的过程很简单:

通过git log -g命令来找到我们需要恢复的信息对应的commit_id,可以通过提交的时间和日期来辨别。一个好的办法是运行:1、git log –since=”2 weeks ago” – myfile 可以2个星期期间的myfile历史;2、git log –branches=”develop” 可以查看develop的commit

通过git branch recover_branch[新分支] commit_id 来建立一个新的分支

这样,我们就把丢失的东西给恢复到了recover_branch分支上了。

Q:如果是不小心执行了git reset,还有办法取消吗?

A:git reflog 查看操作历史,找到之前 HEAD 的 hash 值,然后 git reset –hard 到那个 hash 即可。

Q:怎样找回历史版本中删除的文件?

A:先确定需要恢复的文件要恢复成哪一个历史版本(commit),假设那个版本号是: commit_id,那么

git checkout [commit_id] – 就可以恢复。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  svn git
相关文章推荐