簡體   English   中英

回滾到以前的版本后獲取完整的git日志

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM