Git 基础知识 - 查看提交历史记录
在创建了多个提交之后,或者如果您克隆了具有现有提交历史记录的存储库,则可能需要回顾一下以查看发生了什么。执行此操作的最基本和最强大的工具是命令。git log
这些示例使用了一个非常简单的项目,称为“simplegit”。若要获取项目,请运行:
$ git clone https://github.com/schacon/simplegit-progit
在此项目中运行时,应获得如下所示的输出:git log
$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <xq-mail.com>
Date: Mon Mar 17 21:52:11 2018 -0700
Change version number
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <xq-mail.com>
Date: Sat Mar 15 16:40:33 2018 -0700
Remove unnecessary test
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <xq-mail.com>
Date: Sat Mar 15 10:31:28 2018 -0700
Initial commit
默认情况下,在没有参数的情况下,按时间倒序列出在该存储库中进行的提交;也就是说,最新的提交首先显示。如您所见,此命令列出了每个提交及其 SHA-1 校验和、作者的姓名和电子邮件、写入日期以及提交消息。git log
该命令有大量和各种选项可用于向您准确显示您要查找的内容。在这里,我们将向您展示一些最受欢迎的。git log
其中一个更有用的选项是 or ,它显示了每次提交中引入的差异(修补程序输出)。您还可以限制显示的日志条目数,例如 使用 仅显示最后两个条目。-p–patch-2
$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <sxw-mail.com>
Date: Mon Mar 17 21:52:11 2018 -0700
Change version number
diff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
spec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = "simplegit"
- s.version = "0.1.0"
+ s.version = "0.1.1"
s.author = "Scott Chacon"
s.email = "schacon@gee-mail.com"
s.summary = "A simple gem for using Git in Ruby code."
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2018 -0700
Remove unnecessary test
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index a0a60ae..47c6340 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -18,8 +18,3 @@ class SimpleGit
end
end
-
-if $0 == __FILE__
- git = SimpleGit.new
- puts git.show
-end
此选项显示相同的信息,但每个条目后面都有一个差异。这对于代码审查或快速浏览协作者添加的一系列提交期间发生的情况非常有用。您还可以将一系列汇总选项与 结合使用。例如,如果您想查看每个提交的一些缩写统计信息,则可以使用以下选项:git log–stat
$ git log --stat
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <xq-mail.com>
Date: Mon Mar 17 21:52:11 2018 -0700
Change version number
Rakefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <xq-mail.com>
Date: Sat Mar 15 16:40:33 2018 -0700
Remove unnecessary test
lib/simplegit.rb | 5 -----
1 file changed, 5 deletions(-)
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <xq-mail.com>
Date: Sat Mar 15 10:31:28 2018 -0700
Initial commit
README | 6 ++++++
Rakefile | 23 +++++++++++++++++++++++
lib/simplegit.rb | 25 +++++++++++++++++++++++++
3 files changed, 54 insertions(+)
如您所见,该选项在每个提交条目下方打印已修改文件的列表、更改的文件数以及添加和删除这些文件中的行数。它还将信息摘要放在最后。–stat
另一个真正有用的选项是 。此选项将日志输出更改为默认格式以外的格式。有几个预构建的选项值可供您使用。此选项的值将每个提交打印在一行上,如果您要查看大量提交,这将非常有用。此外,、 和值分别以大致相同的格式显示输出,但信息较少或更多:–prettyonelineshortfullfuller
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 Change version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Remove unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 Initial commit
最有趣的选项值是 ,它允许您指定自己的日志输出格式。当您为机器解析生成输出时,这尤其有用 - 因为您显式指定了格式,因此您知道它不会随着 Git 的更新而更改:format
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : Change version number
085bb3b - Scott Chacon, 6 years ago : Remove unnecessary test
a11bef0 - Scott Chacon, 6 years ago : Initial commit
查看提交历史记录
在创建了多个提交之后,或者如果您克隆了具有现有提交历史记录的存储库,则可能需要回顾一下以查看发生了什么。执行此操作的最基本和最强大的工具是命令。git log
这些示例使用了一个非常简单的项目,称为“simplegit”。若要获取项目,请运行:
$ git clone https://github.com/schacon/simplegit-progit
在此项目中运行时,应获得如下所示的输出:git log
$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <xq-mail.com>
Date: Mon Mar 17 21:52:11 2018 -0700
Change version number
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <xq-mail.com>
Date: Sat Mar 15 16:40:33 2018 -0700
Remove unnecessary test
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <xq-mail.com>
Date: Sat Mar 15 10:31:28 2018 -0700
Initial commit
默认情况下,在没有参数的情况下,按时间倒序列出在该存储库中进行的提交;也就是说,最新的提交首先显示。如您所见,此命令列出了每个提交及其 SHA-1 校验和、作者的姓名和电子邮件、写入日期以及提交消息。git log
该命令有大量和各种选项可用于向您准确显示您要查找的内容。在这里,我们将向您展示一些最受欢迎的。git log
其中一个更有用的选项是 or ,它显示了每次提交中引入的差异(修补程序输出)。您还可以限制显示的日志条目数,例如 使用 仅显示最后两个条目。-p–patch-2
$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <xq-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
Change version number
diff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
spec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = "simplegit"
- s.version = "0.1.0"
+ s.version = "0.1.1"
s.author = "Scott Chacon"
s.email = "xq-mail.com"
s.summary = "A simple gem for using Git in Ruby code."
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <xq-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
Remove unnecessary test
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index a0a60ae..47c6340 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -18,8 +18,3 @@ class SimpleGit
end
end
-
-if $0 == __FILE__
- git = SimpleGit.new
- puts git.show
-end
此选项显示相同的信息,但每个条目后面都有一个差异。这对于代码审查或快速浏览协作者添加的一系列提交期间发生的情况非常有用。您还可以将一系列汇总选项与 结合使用。例如,如果您想查看每个提交的一些缩写统计信息,则可以使用以下选项:git log–stat
$ git log --stat
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <xq-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
Change version number
Rakefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <xq-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
Remove unnecessary test
lib/simplegit.rb | 5 -----
1 file changed, 5 deletions(-)
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <xq-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
Initial commit
README | 6 ++++++
Rakefile | 23 +++++++++++++++++++++++
lib/simplegit.rb | 25 +++++++++++++++++++++++++
3 files changed, 54 insertions(+)
如您所见,该选项在每个提交条目下方打印已修改文件的列表、更改的文件数以及添加和删除这些文件中的行数。它还将信息摘要放在最后。–stat
另一个真正有用的选项是 。此选项将日志输出更改为默认格式以外的格式。有几个预构建的选项值可供您使用。此选项的值将每个提交打印在一行上,如果您要查看大量提交,这将非常有用。此外,、 和值分别以大致相同的格式显示输出,但信息较少或更多:–prettyonelineshortfullfuller
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 Change version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Remove unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 Initial commit
最有趣的选项值是 ,它允许您指定自己的日志输出格式。当您为机器解析生成输出时,这尤其有用 - 因为您显式指定了格式,因此您知道它不会随着 Git 的更新而更改:format
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : Change version number
085bb3b - Scott Chacon, 6 years ago : Remove unnecessary test
a11bef0 - Scott Chacon, 6 years ago : Initial commit
除了输出格式化选项外,还采取了许多有用的限制选项;也就是说,允许您仅显示提交子集的选项。您已经看到了一个这样的选项 - 该选项,它仅显示最后两个提交。实际上,您可以执行 ,其中 任何整数都显示上次提交。实际上,您不太可能经常使用它,因为默认情况下,Git 会通过寻呼机管道传输所有输出,因此您一次只能看到一页日志输出。git log-2-nn
但是,诸如 和 之类的时间限制选项非常有用。例如,以下命令获取过去两周内提交的列表:–since–until
$ git log --since=2.weeks
此命令适用于多种格式 — 您可以指定特定日期(如 或 相对日期,如 )。"2018-01-15"“2 years 1 day 3 minutes ago”
您还可以筛选列表以提交与某些搜索条件匹配的提交。该选项允许您筛选特定作者,该选项允许您在提交消息中搜索关键字。–author–grep
另一个真正有用的过滤器是选项(俗称Git的“pickaxe”选项),它接受一个字符串,只显示那些改变了该字符串出现次数的提交。例如,如果要查找添加或删除对特定函数的引用的最后一次提交,可以调用:-S
$ git log -S function_name
作为筛选器传递到的最后一个真正有用的选项是路径。如果指定目录或文件名,则可以将日志输出限制为对这些文件进行更改的提交。这始终是最后一个选项,通常前面有双破折号 (),以将路径与选项分开:git log–
$ git log -- path/to/file
例如,如果您想查看哪些修改 Git 源代码历史记录中的测试文件的提交是由 Junio Hamano 在 2008 年 10 月提交的,而不是合并提交,则可以运行如下操作:
$ git log --pretty="%h - %s" --author='Junio C Hamano' --since="2018-10-01" \
--before="2008-11-01" --no-merges -- t/
5610e3b - Fix testcase failure when extended attributes are in use
acd3b9e - Enhance hold_lock_file_for_{update,append}() API
f563754 - demonstrate breakage of detached checkout with symbolic link HEAD
d1a43f2 - reset --hard/read-tree --reset -u: remove unmerged new paths
51a94af - Fix "checkout --track -b newbranch" on detached HEAD
b0ad11e - pull: allow "git pull origin $something:$current_branch" into an unborn branch
在 Git 源代码历史记录中的近 40,000 个提交中,此命令显示与这些条件匹配的 6 个提交。
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).
我目前正在用Ruby编写一个项目,它使用ActiveRecordgem进行数据库交互,我正在尝试使用ActiveRecord::Base.logger记录所有数据库事件具有以下代码的属性ActiveRecord::Base.logger=Logger.new(File.open('logs/database.log','a'))这适用于迁移等(出于某种原因似乎需要启用日志记录,因为它在禁用时会出现NilClass错误)但是当我尝试运行包含调用ActiveRecord对象的线程守护程序的项目时脚本失败并出现以下错误/System/Library/Frameworks/Ruby.frame
我有一个应用需要发送用户事件邀请。当用户邀请friend(用户)参加事件时,如果尚不存在将用户连接到该事件的新记录,则会创建该记录。我的模型由用户、事件和events_user组成。classEventdefinvite(user_id,*args)user_id.eachdo|u|e=EventsUser.find_or_create_by_event_id_and_user_id(self.id,u)e.save!endendend用法Event.first.invite([1,2,3])我不认为以上是完成我的任务的最有效方法。我设想了一种方法,例如Model.find_or_cr
在许多ruby类之间共享记录器实例的最佳(正确)方法是什么?现在我只是将记录器创建为全局$logger=Logger.new变量,但我觉得有更好的方法可以在不使用全局变量的情况下执行此操作。如果我有以下内容:moduleFooclassAclassBclassC...classZend在所有类之间共享记录器实例的最佳方式是什么?我是以某种方式在Foo模块中声明/创建记录器还是只是使用全局$logger没问题? 最佳答案 在模块中添加常量:moduleFooLogger=Logger.newclassAclassBclassC..