得之我幸 失之我命

when someone abandons you,it is him that gets loss because he lost someone who truly loves him but you just lost one who doesn’t love you.

git 误删 commit 的后悔药

一个失误导致不应该提交的代码被 commit,赶紧通过 rebase 把 commit drop 掉,可是,这个操作会将本地的改动也一并删除

怎么办,写了一个下午的 shell 脚本就这样一朝回到解放前,oh no,不应该是这样的

重写?太多了吧

我用的是 git,赶紧搜一下,一定有能够恢复 commit 的方法,commit 就 commit 吧,丢了就真的是得不偿失了

果不其然,git reflog,被誉为时光机,不过值得注意的是:它也不能回到任何时刻。Git 会定期清理那些已经不再用到的 “对象”,如果想找到几个月以前的提交,可能时光机也无能为力

1
2
3
4
5
6
7
8
$ git reflog
263c688 (HEAD -> master, origin/master, origin/HEAD) HEAD@{0}: rebase (finish): returning to refs/heads/master
263c688 (HEAD -> master, origin/master, origin/HEAD) HEAD@{1}: rebase (start): checkout HEAD^^
cd144f0 HEAD@{2}: commit: update .gitignore # 可以看到这一条是刚刚被删除的 commit
263c688 (HEAD -> master, origin/master, origin/HEAD) HEAD@{3}: pull --rebase: Fast-forward
0e598ef HEAD@{4}: reset: moving to HEAD
0e598ef HEAD@{5}: pull --rebase: Fast-forward
a31f79a HEAD@{6}: pull --rebase (finish): returning to refs/heads/master

要还原的方式也是多姿多彩:

1
2
3
4
5
6
7
8
# 回到 cd144f0 这个特定的 commit
$ git reset --hard cd144f0

# 暂存 cd144f0 中的改动,并且不会马上提交
$ git reset --soft cf2e245

# 找回 cd144f0 某个文件的改动,暂存起来
$ git checkout cd144f0 file_name

be yourself, everyone else is already taken.