手册页说日志显示提交日志,并且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