[英]Getting the full git log after rolling back to a previous version
我是git的新手,可能沒有使用正確的術語,所以忍受我:)
假設我有一個包含5個更改的存儲庫,例如
D:\test\gitrepo2>git log --oneline
3a5fd33 555
3cfbfae 444
e9a78c8 333
a618586 222
b80d5e1 111
我了解到我可以通過以下方式同步回到早期版本:
D:\test\gitrepo2>git reset e9a78c8 --hard
HEAD is now at e9a78c8 333
我的問題是:完成此操作后,如何獲取完整日志,以便我可以回到最新版本?
運行日志不再顯示這些修訂:
D:\test\gitrepo2>git log --oneline
e9a78c8 333
a618586 222
b80d5e1 111
我也嘗試添加--all開關,這沒有什么區別。 在Mercurial中,在相同的情況下,即使在我更新到早期版本之后,運行“hg log”也會提供完整的日志。
我假設通過“同步回來”你真的意味着你只是希望你的工作副本看起來像以前的時間點。 要做到這一點,你想要checkout
,而不是reset
:
> git checkout e9a78c8
此時,您的存儲庫如下所示:
> git log master --oneline
3a5fd33 555 <--- master is still here
3cfbfae 444
e9a78c8 333 <--- HEAD (working copy) is here
a618586 222
b80d5e1 111
現在回到master
上的最新提交,再次git checkout master
。
通過使用reset
,你得到了這個:
> git log master --oneline
e9a78c8 333 <--- HEAD (working copy) and master are here
a618586 222
b80d5e1 111
使用git reset
更新指針(refs / heads / master)以指向早期版本。 它實際上並沒有做出有效回滾到早期版本的新版本,我認為這是你的“Mercurial等價物”所做的(這有點像git revert
那樣)。
但是,Git會記錄refs / heads / master如何隨時間變化的日志文件,以及HEAD的單獨文件。 您可以使用相當原始的形式查看此內容
git reflog show HEAD
(或掌握)或通過簡單使用以更熟悉的形式
git log -g
這種git日志模式顯示了reflog條目,而不是遍歷修訂圖: git log -g -n 10
將顯示HEAD指向的最后10個內容 - 所以它與git log -n 10
相同如果你有完成是簡單的git commit
s。
但是,它也會顯示更改分支,重置等。
git log -g master
將僅顯示主分支更改的reflog條目(更改分支根本不會出現在任何分支reflog中)。
如果你想回去,可以考慮做一個(無頭)結賬( git checkout HEAD^
)
我想你只是需要
git log HEAD@{1}
所以,例如在一個新的回購
mkdir -pv /tmp/repo
cd /tmp/repo
git init
touch a
git add .
git commit -am 1
echo something > a
git commit -am 2
git reset --hard HEAD^
git log HEAD@{1}
輸出:
commit ca6f2c6c1b07895816a1b75973035a20a0238607
Author: Seth <sehe@xxxxxxxxx>
Date: Thu Apr 21 01:17:06 2011 +0200
2
commit d71ea3dfa89771af6d3ae2d0e88e1dc6ccce48b8
Author: Seth <sehe@xxxxxxxxx>
Date: Thu Apr 21 01:16:56 2011 +0200
1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.