1.前言
需要把以前的功能弄回来,但是已经是一个月前的事了,git下如何操作呢.
2.过程:
ubuntu系统。
git UI工具快速找到需要差异化提交,用cola发现无法复制对比差异。
按我的想法,找到去掉功能提交前的commit记录,对比下,copy整理下就能快速搞定了。
发现cola对比差异无法编辑,只能用vi编辑,vi不会用,学了下感觉搞不通。
所以我得找其他的UI化git视图。用AS自带的能直接复制,解决了这个问题。
但是AS不会展示删除的文件。就没法新建文件复制代码。
接下来我要恢复被删除的文件。找了挺久,发现下面这个:
http://www.linuxidc.com/Linux/2014-09/107293.htm
精华如下:
1. 通过git log -g命令来找到我们需要恢复的信息对应的commit_id,可以通过提交的时间和日期来辨别。一个好的办法是运行:1、git log --since="2 weeks ago" -- myfile 可以2个星期期间的myfile历史;2、git log --branches="develop" 可以查看develop的commit
2. 通过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] -- <path_to_file>就可以恢复
我直接 git checkout 2e0xxxxxxxx -- ./app/src/main/res/layout/xxxx_item.xml
刷新目标父目录,文件回来了。
哦啦。
小提示:恢复的版本应该选改动提交前的版本,AS中Copy Version Number就能快速得到提交的SHA,即提交id.
补充:
后面我发现AS其实是有显示删除文件的,可能因为我是直接重命名文件再修改,git认为是删除了文件,再添加文件。而智能的AS显示的是修改。如此一来也可以copy and paste.
3.后话
对工具的运用,追求效率方法。不知还有更快的方法没,回退较久提交的功能代码。
功能回退最好一个个退,一下会几个commit记录事件跨度太大可能会混乱。