-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
51 lines (37 loc) · 5.29 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>ZENONE</title>
<subtitle>菩萨畏因,众生畏果。</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://blog.zenone.cn/"/>
<updated>2018-09-11T13:26:11.179Z</updated>
<id>http://blog.zenone.cn/</id>
<author>
<name>zenone</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>Git - 找回丢失的 commit</title>
<link href="http://blog.zenone.cn/2018/09/10/Git%20-%20%E6%89%BE%E5%9B%9E%E4%B8%A2%E5%A4%B1%E7%9A%84%20commit/"/>
<id>http://blog.zenone.cn/2018/09/10/Git - 找回丢失的 commit/</id>
<published>2018-09-10T13:55:42.165Z</published>
<updated>2018-09-11T13:26:11.179Z</updated>
<content type="html"><![CDATA[<p>上周五,版本提测的日子,快下班的时候同事发现刚提交的代码不见了,由于提交的代码量还挺多,重写至少三五个小时,所以向我求助,好在我帮他找回了丢失的提交,在此记录一下。<br>找回丢失的提交有两种方式,一是通过 <code>git reflog</code>,二是通过<code>git fsck</code>。</p>
<h2 id="git-reflog"><a href="#git-reflog" class="headerlink" title="git reflog"></a>git reflog</h2><p><code>git reflog</code> 会列出本地所有的操作记录,包括 commit、checkout、pull、rebase、merge 等等,因此,只要你提交了代码(执行了 commit),通过<code>git reflog</code>命令就能看到这条提交信息了,然后就可以通过<code>git cherry-pick</code>将这次提交合并过来。<br><a id="more"></a></p>
<h2 id="git-fsck"><a href="#git-fsck" class="headerlink" title="git fsck"></a>git fsck</h2><p><code>git fsck --lost-found</code> 会列出被丢弃的git对象,包括 blob、tree、commit等对象,而且并不是按照时间排序的。</p>
<p><img src="http://ompeiz5jz.bkt.clouddn.com/20180910222852_IoVCVv_git_fsck_lost_found.jpeg" alt=""></p>
<p>如果这个列表很长的话,想从里面找出最近丢失的commit还是挺困难的,我们可以使用下面的命令优化输出格式:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">git fsck --lost-found | grep <span class="string">"dangling commit"</span> | cut <span class="_">-d</span><span class="string">" "</span> <span class="_">-f</span> 3 | xargs -I <span class="string">"{}"</span> git --no-pager show <span class="_">-s</span> --pretty=format:<span class="string">'%Creset %C(magenta)%h %C(white)-%Cgreen %s %C(yellow)<%an> %Cred(%ci)%n'</span> --after=<span class="string">'2018-08-01'</span> <span class="string">"{}"</span></div></pre></td></tr></table></figure>
<p><code>grep "dangling commit"</code> 限制只输出丢失的commit对象,<code>cut -d" " -f 3</code> 限制只输出 commit 的哈希值(也可以用<code>awk "{print $3}"</code>),然后使用<code>xargs -I</code> 将commit哈希值替换为 <code>git show</code>命令,当然可以附带很多参数,下面是优化后的结果。</p>
<p><img src="http://ompeiz5jz.bkt.clouddn.com/20180911212546_3GZY62_git_fsck_lost_found_optimize.jpeg" alt="git fsck --lost-found 命令优化"></p>
<p>这样我们就可以更加快速的找到丢失的 commit 对象,然后通过<code>git cherry-pick</code>将这次提交合并过来。</p>
<h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><p><a href="https://stackoverflow.com/questions/10099258/how-can-i-recover-a-lost-commit-in-git" target="_blank" rel="external">How can I recover a lost commit in Git?</a><br><a href="https://stackoverflow.com/questions/30760611/can-i-get-git-fsck-to-show-commit-names" target="_blank" rel="external">Can I get git fsck to show commit names?</a><br><a href="https://git-scm.com/book/zh/v1/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-%E7%BB%B4%E6%8A%A4%E5%8F%8A%E6%95%B0%E6%8D%AE%E6%81%A2%E5%A4%8D" target="_blank" rel="external">Git 内部原理 - 维护及数据恢复</a></p>
]]></content>
<summary type="html">
<p>上周五,版本提测的日子,快下班的时候同事发现刚提交的代码不见了,由于提交的代码量还挺多,重写至少三五个小时,所以向我求助,好在我帮他找回了丢失的提交,在此记录一下。<br>找回丢失的提交有两种方式,一是通过 <code>git reflog</code>,二是通过<code>git fsck</code>。</p>
<h2 id="git-reflog"><a href="#git-reflog" class="headerlink" title="git reflog"></a>git reflog</h2><p><code>git reflog</code> 会列出本地所有的操作记录,包括 commit、checkout、pull、rebase、merge 等等,因此,只要你提交了代码(执行了 commit),通过<code>git reflog</code>命令就能看到这条提交信息了,然后就可以通过<code>git cherry-pick</code>将这次提交合并过来。<br>
</summary>
<category term="programming" scheme="http://blog.zenone.cn/categories/programming/"/>
<category term="git" scheme="http://blog.zenone.cn/tags/git/"/>
</entry>
</feed>