查看git提交历史一般常用两个命令:
# 查看历史提交记录
git log
# 以列表形式查看指定文件的历史记录
git blame <文件名>
该命令会按照我们提交的时间线,然后列出所有的历史提交。
示例:

git log 显示的提交历史信息,一般包含下面4条信息:

但是, git log 命令还有很多选项参数供我们选择,以便我们控制输出提交信息的形式。
git log --onelinegit log --author=用户名下表列出了 git log 命令的常用选项参数及作用:
| 参数 | 作用 |
|---|---|
| -p | 按补丁格式显示每个更新之间的差异 |
| –-stat | 显示每次更新的文件修改统计信息 |
| –-shortstat | 只显示 --stat 中最后的行数修改添加移除统计 |
| –-name-only | 仅在提交信息后显示已修改的文件清单 |
| –-name-status | 显示新增、修改、删除的文件清单 |
| –-abbrev-commit | 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符 |
| –-relative-date | 使用较短的相对时间显示(比如,“2 weeks ago”) |
| –-graph | 显示 ASCII 图形表示的分支合并历史 |
| –-pretty | 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式) |
| -(n) | 仅显示最近的 n 条提交 |
| –-since, --after | 仅显示指定时间之后的提交 |
| –-until, --before | 仅显示指定时间之前的提交 |
| –-author | 仅显示指定作者相关的提交 |
| –-committer | 仅显示指定提交者相关的提交 |
详细解释可参考下面这篇文章的解释:
示例:

如果要查看指定文件的修改记录可以使用 git blame 命令,命令格式如下:
git blame <file>
示例:

Git版本前进回退的本质是移动HEAD指针。HEAD指针,默认情况下都会指向最新的一次commit(提交)。HEAD和commit的大概关系图如下:

版本的前进或者回退使用 git reset 命令,这样可以指定退回某一次提交的版本。
git reset 命令语法格式如下:
git reset [--soft | --mixed | --hard] [HEAD]
其中,–soft | --mixed | --hard 分别是3个参数。
HEAD 参数说明:
可以使用 ~数字表示
–mixed 为默认参数,在执行命令时可以不用带该参数。该参数会移动HEAD指针和重置index(暂存)区,但是工作区的内容保持不变。
1、重置暂存区(就是取消刚刚添加到暂存区的内容)
先通过 git add 命令,把文件提交到暂存区。

然后,执行 git reset --mixed 命令,可以把刚刚提交到暂存区的内容恢复,如下:

该命令其实省略了 HEAD,整个完整的命令:
git reset --mixed HEAD
HEAD 其实就是当前版本的意思,该其实就是相当于取消了刚刚添加到缓存(暂存区)的内容。
2、暂存区回退到上一版本
git reset --mixed HEAD^ # 回退所有内容到上一个版本
git reset --mixed HEAD^ hello.php # 回退 hello.php 文件的版本到上一个版本
该命令相当于回退了本地仓库的内容到上一版本(就是恢复了最近一次commit的内容),但是该命令是不会改变工作区的文件的。
–soft 参数仅仅只是移动了HEAD指针,暂存区和工作区的内容都不会被改变(相当于只是回退到未提交前的状态)。
git reset --soft HEAD^ # 回退到最近一次未提交前的状态
git reset --soft HEAD~3 # 回退到上上上一次未提交前的状态
示例:

–soft 参数的应用场合一般是:比如我们前面一次commit提交之后,发现提交的说明信息写错了,我们想更改一下提交的说明信息,这个时候我们可以使用 --soft 参数,仅仅回退一下HEAD指针(该参数不会重置暂存区和工作区)。然后我们再次commit,写上正确的提交说明信息即可。
–hard 该参数会移动本地库HEAD指针,而且还会重置暂存区和工作区。在使用中一定要谨慎使用。
git reset --hard HEAD^ # 回退到上一个版本
git reset --hard HEAD~3 # 回退到上上上一个版本
git reset –hard bae128 # 回退到某个版本回退点之前的所有信息。
git reset --hard origin/master # 将本地的状态回退到和远程的一样
1、先查看git当前状态和提交历史,以及查看 test.c 文件内容:

2、使用 git reset --hard HEAD^ 命令回退上一版本:

使用该命令后,回退到了上一版本了。最近一次commit是提交一个新建的 .gitignore 文件,现在查看提交历史,发现确实少了这一次的提交,而且我查看工作区目录,该文件已经被删除了。
3、再次回退一个版本,查看下 test.c 的内容是否被回退了:

这个时候,HEAD指针相当于已经指向了回退两次之前的commit了。
上面我们回退了两个版本,而且 --hard 参数是可以更改我们工作区中的内容的。我们发现自己搞错了,不想回退,想恢复原来的版本咋办?
我们也可以通过 git reset --hard 命令恢复刚刚的版本回退(可以说是版本前进吧,反正就是移动HEAD指针)。
使用 HEAD参数的话只能实现版本后退的操作,所以版本的前进我们只能使用索引值来实现。
git reset --hard [HEAD] # 只能实现版本的后退操作
git reset --hard [索引值] # 使用索引值既可以实现版本后退,也可以实现版本前进
1、先使用 git log --oneline 命令查看每次提交的索引值。

当然,如果版本已经回退了,git log 命令就之后列出当前的commit。所以我们前面在版本回退之前,可以先把之前的git log信息保存,然后再进行版本回退。
或者也可以使用 git reflog 命令获取到commit的索引值,该命令可以查看到当前仓库所有的改变,如下:

2、使用上面图片的 f226d87 索引值,把版本前进到回退之前的版本。
git reset --hard f226d87

我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g
Rails相对较新。我正在尝试调用一个API,它应该向我返回一个唯一的URL。我的应用程序中捆绑了HTTParty。我已经创建了一个UniqueNumberController,并且我已经阅读了几个HTTParty指南,直到我想要什么,但也许我只是有点迷路,真的不知道该怎么做。基本上,我需要做的就是调用API,获取它返回的URL,然后将该URL插入到用户的数据库中。谁能给我指出正确的方向或与我分享一些代码? 最佳答案 假设API为JSON格式并返回如下数据:{"url":"http://example.com/unique-url"
我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption
我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?
在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.
a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],