git reflog and checkout
用錯checkout 了比如想checkout出下面的一個版本,結果用錯了
git checkout ?8bfd9b1d292 這樣會導致HEAD? deatched ,在這個地方修改后commit??
commit 8bfd9b1d2922b55586f41d37f1a2a992d580e1dd Author: lab <lab@dera.com.cn> Date:?? Tue Dec 8 20:21:42 2015 +0800
??? update main.c
當git checkout master? 時 剛的8bfd9b1d292 分支就丟了。
?
可以用下面方法找回
git reflog
c65ec9a HEAD@{0}: checkout: moving from 68657499e57fdcd970f9207ac2cb0f656d3bd5b6 to master
8bfd9b1d292 HEAD@{1}: checkout: moving from master to
?
git reset --hard 8bfd9b1d292 后可以將恢復
?
?
恢復 git reset -hard 的誤操作?
轉帖:http://hi.baidu.com/configuration/item/97fddeea252818d0eb34c964
有時候使用Git工作得小心翼翼,特別是涉及到一些高級操作,例如?reset,?rebase?和?merge。甚至一些很小的操作,例如刪除一個分支,我都擔心數據丟失。
不 久之前,我在做一些大動作(rebasing)之前,我總是備份整個版本庫,以防萬一。直到最近我才發現git的歷史記錄是不可修改的,也就是說你不能更 改任何已經發生的事情。你做的任何操作都只是在原來的操作上修改。也就是說,即使你刪除了一個分支,修改了一個提交,或者強制重置,你仍然可以回滾這些操 作。
讓我們來看一些例子:
$?git?init $?touch?foo.txt $?git?add?foo.txt $?git?commit?-m?"initial?commit"
$?echo?'new?data'?>>?foo.txt $?git?commit?-a?-m?"more?stuff?added?to?foo"
你現在看git的歷史記錄,你可以看到兩次提交: $?git?log *?98abc5a?(HEAD,?master)?more?stuff?added?to?foo *?b7057a9?initial?commit
現在讓我們來重置回第一次提交的狀態: $?git?reset?--hard?b7057a9 $?git?log *?b7057a9?(HEAD,?master)?initial?commit
這看起來我們是丟掉了我們第二次的提交,沒有辦法找回來了。但是?reflog?就是用來解決這個問題的。簡單的說,它會記錄所有HEAD的歷史,也就是說當你做?reset,checkout等操作的時候,這些操作會被記錄在reflog中。
$?git?reflog b7057a9?HEAD@{0}:?reset:?moving?to?b7057a9 98abc5a?HEAD@{1}:?commit:?more?stuff?added?to?foo b7057a9?HEAD@{2}:?commit?(initial):?initial?commit
所以,我們要找回我們第二commit,只需要做如下操作: $?git?reset?--hard?98abc5a
再來看一下?git?記錄: $?git?log *?98abc5a?(HEAD,?master)?more?stuff?added?to?foo *?b7057a9?initial?commit
所以,如果你因為reset等操作丟失一個提交的時候,你總是可以把它找回來。除非你的操作已經被git當做垃圾處理掉了,一般是30天以后。
轉載于:https://www.cnblogs.com/fastwave2004/p/5046382.html
總結
以上是生活随笔為你收集整理的git reflog and checkout的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dial up network
- 下一篇: 【Navicat】Navicat:Nav