手冊頁說日誌顯示提交日誌,並且reflog管理引用日誌信息。什麼是reflog信息,它有什麼,日誌沒有?日誌似乎更加詳細。git reflog和log有什麼區別?
回答
git log
顯示當前HEAD及其祖先。也就是說,它將打印提交HEAD點,然後打印其父,父,等等。它通過回購的祖先遍歷回來,遞歸地查找每個提交的父項。
(在實踐中,一些提交有多個父。要看到一個更有代表性日誌,請使用如下命令git log --oneline --graph --decorate
。)
git reflog
不經過HEAD的祖先都沒有。 reflog是HEAD指出的提交的有序列表:它是您的回購的撤消歷史記錄。 reflog不是repo本身的一部分(它被單獨存儲到提交本身),並且不包含在推送,提取或克隆中;它純粹是本地的。
另外:理解reflog意味着你不能從你的repo數據中丟失數據,一旦它被提交。如果您不小心重置爲較舊的提交或錯誤地重新綁定,或者任何其他視覺上「移除」提交的操作,則可以使用reflog查看之前的位置,然後再返回該引用以恢復先前的狀態。記住,參考文獻不僅意味着承諾,還包括其背後的整個歷史。
這裏的explanation of reflog
from the Pro Git book:
的事情之一的Git確實在後臺,當你在外打工的就是保持一個引用日誌 - 日誌在哪裏你的頭和分支引用已經在過去的幾個月。
您可以通過使用
git reflog
看到你引用日誌:$ git reflog 734713b... [email protected]{0}: commit: fixed refs handling, added gc auto, updated d921970... [email protected]{1}: merge phedders/rdocs: Merge made by recursive. 1c002dd... [email protected]{2}: commit: added some blame and merge stuff 1c36188... [email protected]{3}: rebase -i (squash): updating HEAD 95df984... [email protected]{4}: commit: # This is a combination of two commits. 1c36188... [email protected]{5}: rebase -i (squash): updating HEAD 7e05da5... [email protected]{6}: rebase -i (pick): updating HEAD
每次你的分支頂端以任何理由更新時,Git的商店,在這個臨時歷史記錄您的信息。你也可以用這些數據指定較早的提交。
reflog
命令也可用於刪除條目或從reflog中過期的條目過舊。來自official Linux Kernel Git documentation for reflog
:
子命令
expire
用於修剪較舊的引用日誌條目。要從引用日誌中刪除單個條目,請使用子命令
delete
並指定確切條目(例如git reflog delete [email protected]{2}
)。
但不將'混帳log'爲您提供相同的信息?很抱歉,如果看起來很明顯,我對GIT很陌生,想在我的第一個OMG之前獲得一些基礎知識。 – Noich
Git日誌是您***提交***的記錄。正如Pro Git書所述,reflog是您的***引用***(基本上,您的分支指針和您的「HEAD」指針)的記錄,以及它們指向的提交記錄。那有意義嗎?在附註中,'log'也可以顯示reflog信息,但是必須傳遞一個特殊選項標誌作爲參數,'--walk-reflogs'。 – 2013-07-25 13:23:06
另外,既然您是Git初學者,我強烈建議您閱讀Pro Git書籍,這是我從Git學到的大部分知識。我建議第1-3和6-6.5章。我還強烈建議您學習如何以交互方式和非交互方式進行rebase。 – 2013-07-25 13:25:10
git log
顯示提交日誌從裁判(頭,標籤,遙控器)訪問git reflog
是記錄是在任何時間在你的回購中引用的所有提交的。
這就是爲什麼當你做一個「破壞性」的操作(如刪除一個分支)git reflog
(一本地這是後缺省的90天清理記錄)時,爲了找回SHA1是被該分支引用。
見git config
:
gc.reflogexpire
gc.<pattern>.reflogexpire
git reflog
到期刪除比這個時間早引用日誌條目;默認爲90天。
在中間,「<pattern>
」(例如「refs/stash
」)的設置僅適用於匹配<pattern>
的參考。
git reflog
經常引用爲 「your safety net」
在故障情況下,一般建議,當git的日誌不告訴你,你在找什麼,就是:
同樣,reflog是您的SHA1的本地錄製。
與git log
相反:如果您將庫存回推到upstream repo,您將看到相同的git log
,但不一定相同git reflog
。
我很好奇這也只是想闡述和總結了一下:
git log
顯示所有你提交你所在分支的歷史。簽出一個不同的分支,你會看到不同的提交歷史記錄。如果您想看到您爲所有分支提交歷史記錄,請鍵入git log --all
。git reflog
顯示您的參考記錄,如Cupcake說的。每次進行提交或檢出時都會有一個條目。嘗試使用git checkout
幾次在兩個分支之間來回切換,並在每次結賬後運行git reflog
。您會看到每次更新的頂級條目都是「結帳」條目。您在git log
中看不到這些類型的條目。
參考文獻: http://www.lornajane.net/posts/2014/git-log-all-branches
- 1. 「git rm * .log」和「git rm \ *。log」有什麼區別?
- 2. .out和.log文件有什麼區別
- 3. .log和.txt有什麼區別?
- 4. git log的雙點和三點有什麼區別
- 5. 「git checkout」和「git checkout - 」有什麼區別?
- 6. `git diff`和`git difftool`有什麼區別?
- 7. git add *和git add。有什麼區別?
- 8. git am和git apply有什麼區別?
- 9. 「git reset」和「git rebase」有什麼區別?
- 10. git-stash和git-checkout有什麼區別?
- 11. git push和git pull有什麼區別?
- 12. file .git和directory .git有什麼區別?
- 13. GIT的Branch和Remote有什麼區別?
- 14. git和bitbucket有什麼區別?
- 15. git clone和checkout有什麼區別?
- 16. msys/git和git-for-windows/mingw-w64-x86_64-git有什麼區別?
- 17. git pull,git fetch和git rebase有什麼區別?
- 18. 'git remote update','git fetch'和'git pull'有什麼區別?
- 19. 從設計的角度來看,Log()和Log(LogLevel)之間有什麼區別嗎?
- 20. 別名和標籤有什麼區別? (一般和在git中)
- 21. 爲什麼`git log`在本地和遠程分支之間找不到區別?
- 22. git reset --hard HEAD和git clean --force -d有什麼區別?
- 23. git cherry-pick和git show之間有什麼區別? patch -p1?
- 24. git clone和git clone --mirror有什麼區別?
- 25. 「git push origin <branch>」和「git flow feature publish」有什麼區別?
- 26. git clone:url [email protected]/...和url有什麼區別git://github.com/
- 27. 'git fetch'和'git fetch --all'有什麼區別
- 28. git reset文件和git checkout文件有什麼區別?
- 29. Git/Git Extension中的「squash」和「fixup」有什麼區別?
- 30. 「git show test.rb」和「git show HEAD:test.rb」有什麼區別?
謹慎的說法:您有時會丟失數據,因爲reflog條目不會永久保存 - 它們會在特定條件下被清除。請參閱[本答案](http://stackoverflow.com/a/26451688/1614641)和[git-reflog](https://www.git-scm.com/docs/git-reflog)和[ GIT-GC(https://www.git-scm.com/docs/git-gc)。一般來說,如果破壞性手術不超過2周,那麼你很可能是安全的。 – mcmlxxxvi
@mcmlxxxvi我有兩個本地文件夾相同的回購,我可以合併兩個文件夾reflogs? – Tmx