草庐IT

git-查看日志、log和reflog

zdkdchao 2023-12-01 原文

com

log是查看提交记录(commit),而reflog是操作记录。最大区别是能不能查询到被删除的 commit 记录和 reset 的操作记录,log不能,而reflog可以。

在平时的开发中,经常会遇到代码提交错了需要回滚到一个历史版本,或因为大意回滚错了代码又需要还原等问题,这种回滚和还原操作都离不开git操作命令历史记录的查询。哪git为什么能实现回滚和撤销操作呢?主要跟HEAD有关,HEAD就是当前的意思。

Git允许我们在版本的历史和未来之间进行穿梭移动,使用命令 git reset --hard commit_id 就可以实现。这里的hard是硬的意思,对应的,还有soft软。

一般的操作是:回到过去,用git log查看以前的记录。如果发现回错了,用git reflog查询所有提交,然后再回来
下面来看看git log 和 git reflog的使用区别

git log命令

git log命令可以显示当前分支所有操作记录,不仅仅包含commit,还有回滚(reset)和切分支(checkout),不包括已经被删除的 commit 记录和reset的操作。(注意: 只是当前分支操作的信息)。例如下面这个例子: 先在dev_test1分支上修改一次文件,并commit标记提交信息;然后再修改一次文件,并commit标记提交信息;通过git log查到提交的信息如下:

直接使用git log显示的信息太繁琐,可以加上参数 --pretty=oneline 只会显示版本号和提交时的备注信息,这样阅读起来更友好得多。

#命令
git reflog --pretty=oneline


假如现在发现上面的第二次修改提交的代码有问题,需要将代码回滚到第一次提交的版本上,就可以使用git log查询commit_id来进行回滚。如下操作:

如上图,使用 git reset --hard xxxx 回滚代码后,再使用git log查询提交的信息时,已经看不到前面的commitid(没有第一次修改的信息)。
到此就实现了git的HEAD穿梭到历史版本上,完成代码的回滚,但是会存在一个问题:假如使用 git reset --hard回滚代码后,发现回滚错了,需要还原本次的回滚(即 git的HEAD需要重返未来),但此时再使用git log来查询commit_id时,会发现查询不到已经被reset的操作版本号了,无法重返未来。解决这个问题就需要用git reflog命令。

git reflog命令

git reflog命令可以查看所有分支的所有操作记录信息(包括已经reset前面的commitID)。例如:执行 git reset --hard HEAD~1,退回到上一个版本,用git log则是看不出来被删除的commitid,用git reflog则可以看到被删除的commitid,这样我们就可以买后悔药,恢复到被删除的那个版本。

如上图,即使使用reset回滚代码后,用git reflog可以看到被隐藏的commitid。

git reflog还有个作用就是:可以查看所有分支的所有操作记录信息。如下图操作是:从dev_test1分支上切到dev_test2分支上修改bug后commit提交,再切换dev_test1进行开发,此时在dev_test1分支上能看到dev_test2分支的提交记录。

有关git-查看日志、log和reflog的更多相关文章

  1. git使用常见问题(提交代码,合并冲突) - 2

    文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g

  2. ruby - Dropbox 类似 git 的服务——没有 rsync 和 inotify - 2

    关于如何使用git设置类似Dropbox的服务,您有什么建议吗?您认为git是解决此问题的合适工具吗?我在考虑使用git+rush解决方案,你觉得怎么样? 最佳答案 检查这个开源项目:https://github.com/hbons/SparkleShare来自项目的自述文件:Howdoesitwork?SparkleSharecreatesaspecialfolderonyourcomputer.Youcanaddremotelyhostedfolders(or"projects")tothisfolder.Theseprojec

  3. ruby - 混帐 & ruby : How can I unset the GIT_DIR variable from inside a ruby script? - 2

    我编写了一个非常简单的“部署”脚本,作为我的裸git存储库中的post-updateHook运行。变量如下livedomain=~/mydomain.comstagingdomain=~/stage.mydomain.comgitrepolocation=~/git.mydomain.com/thisrepo.git(bare)core=~/git.mydomain.com/thisrepo.gitcore==addedremoteintoeachlive&stagegitslive和stage都初始化了gitrepos(非裸),我已经将我的裸仓库作为远程添加到它们中的每一个(名为co

  4. ruby - Heroku production.log 文件位置 - 2

    我想在heroku.com上查看我的应用程序日志的内容,所以我关注了thisexcellentadvice并拥有我所有的日志内容。但是我现在很想知道我的日志文件实际在哪里,因为“log/production.log”似乎是空的:C:\>herokuconsoleRubyconsoleforajpbrevx.heroku.com>>files=Dir.glob("*")=>["public","tmp","spec","Rakefile","doc","config.ru","app","config","lib","README","Gemfile.lock","vendor","sc

  5. ruby - 让 bundler 使用 http : instead of git:? - 2

    我正在安装gitlabhq,并且在Gemfile中有对某些资源的“git://...”的引用。但是,我在公司防火墙后面,所以我必须使用http://。我可以手动编辑Gemfile,但我想知道是否有另一种方法告诉bundler使用http://作为git存储库? 最佳答案 您可以通过运行gitconfig--globalurl."https://".insteadOfgit://或通过将以下内容添加到~/.gitconfig:[url"https://"]insteadOf=git://

  6. ruby - Sinatra 中的全局救援和日志记录异常 - 2

    如何在出现异常时指定全局救援,如果您将Sinatra用于API或应用程序,您将如何处理日志记录? 最佳答案 404可以在not_found方法的帮助下处理,例如:not_founddo'Sitedoesnotexist.'end500s可以通过调用带有block的错误方法来处理,例如:errordo"Applicationerror.Plstrylater."end错误的详细信息可以通过request.env中的sinatra.error访问,如下所示:errordo'Anerroroccured:'+request.env['si

  7. ruby-on-rails - 使用 Ruby 标准 Logger 每天只创建一个日志 - 2

    我正在使用ruby​​标准记录器,我想要每天轮换一次,所以在我的代码中我有:Logger.new("#{$ROOT_PATH}/log/errors.log",'daily')它运行完美,但它创建了两个文件errors.log.20130217和errors.log.20130217.1。如何强制它每天只创建一个文件? 最佳答案 您的代码对于长时间运行的应用程序是正确的。发生的事情是您在给定的一天多次运行代码。第一次运行时,Ruby会创建一个日志文件“errors.log”。当日期改变时,Ruby将文件重命名为“errors.log

  8. ruby - Cucumber/Savon 省略或删除日志输出 - 2

    在运行Cucumber测试时,我得到(除了测试结果)大量调试/日志相关的输出形式:D,[2013-03-06T12:21:38.911829#49031]DEBUG--:SOAPrequest:D,[2013-03-06T12:21:38.911919#49031]DEBUG--:Pragma:no-cache,SOAPAction:"",Content-Type:text/xml;charset=UTF-8,Content-Length:1592W,[2013-03-06T12:21:38.912360#49031]WARN--:HTTPIexecutesHTTPPOSTusingt

  9. ruby-on-rails - faraday如何设置日志级别 - 2

    我最近将我的http客户端切换到faraday,一切都按预期工作。我有以下代码来创建连接:@connection=Faraday.new(:url=>base_url)do|faraday|faraday.useCustim::Middlewarefaraday.request:url_encoded#form-encodePOSTparamsfaraday.request:jsonfaraday.response:json,:content_type=>/\bjson$/faraday.response:loggerfaraday.adapterFaraday.default_ada

  10. ruby-on-rails - 安装 active admin 时 activeadmin.git (at master) is not yet checked out 错误 - 2

    Activeadmingem已添加到我的rails项目中,但每次我尝试安装railsgactive_admin:install时,我都会收到类似的错误git://github.com/activeadmin/activeadmin.git(atmaster)isnotyetcheckedout.Runbundleinstallfirst.我肯定在运行“railsgactive_admin:install”之前运行了bundle。运行“bundleshow”后,我看到我已将“*activeadmin(1.0.0.pre3f916d6)”添加到我的项目中,但不断收到此错误消息。我的gem文

随机推荐