git命令统计代码(git命令大全(非常齐全))

admin 144 0

大家好,今天小编来为大家解答git命令统计代码这个问题,git命令大全(非常齐全)很多人还不知道,现在让我们一起来看看吧!

一、怎么统计git被clone次数

在使用git来进行版本控制时,为了得一个项目的拷贝(copy),我们需要知道这个项目仓库的地址(Git URL). Git能在许多协议下使用,所以Git URL可能以ssh://, http(s)://, git://,或是只是以一个用户名(git会认为这是一个ssh地址)为前辍.

有些仓库可以通过不只一种协议来访问,例如,Git本身的源代码你既可以用 git://协议来访问:

git clone git://git.kernel.org/pub/scm/git/git.git

git clone http://www.kernel.org/pub/scm/git/git.git

git://协议较为快速和有效,但是有时必须使用http协议,比如你公司的防火墙阻止了你的非http访问请求.如果你执行了上面两行命令中的任意一个,你会看到一个新目录:'git',它包含有所的Git源代码和历史记录.

在默认情况下,Git会把"Git URL"里最后一级目录名的'.git'的后辍去掉,做为新克隆(clone)项目的目录名:(例如. git clone http://git.kernel.org/linux/kernel/git/torvalds/linux-2.6.git会建立一个目录叫'linux-2.6')

另外,如果访问一个Git URL需要用法名和密码,可以在Git URL前加上用户名,并在它们之间加上@符合以表示分割,然后执行git clone命令,git会提示你输入密码。

git clone robin.hu@http://www.kernel.org/pub/scm/git/git.git

这样将以作为robin.hu用户名访问http://www.kernel.org/pub/scm/git/git.git,然后按回车键执行git clone命令,git会提示你输入密码。

另外,我们可以通过-b<name>来指定要克隆的分支名,比如

$ git clone-b master2../server.

表示克隆名为master2的这个分支,如果省略-b<name>表示克隆master分支。

二、gitgui查看历史版本

1. git gui怎么查看文件修改记录

在git中查看历史的命令主要是git log,要查看某个文件的修改历史可以这样:$ git log-- begin.txt可以添加不同的选项让输出的内容或格式有所不同。

在git中查看历史的命令主要是git log,要查看某个文件的修改历史可以这样:$ git log-- begin.txt可以添加不同的选项让输出的内容或格式有所不同。

$ git log-p-- begin.txt-p选项可以输出每次提交中的diff,但个人感觉会把输出搞得很长、很乱,不容易找到重点。个人比较喜欢的方式是:$ git log--pretty=oneline-- filename在log命令中加入--pretty=oneline选项会让结果看起来清爽一些,但是只能看到ments,看不到提交的用户和日期。

在git中查看历史的命令主要是git log,要查看某个文件的修改历史可以这样:

可以添加不同的选项让输出的内容或格式有所不同。

-p选项可以输出每次提交中的diff,但个人感觉会把输出搞得很长、很乱,不容易找到重点。

$ git log--pretty=oneline-- filename

在log命令中加入--pretty=oneline选项会让结果看起来清爽一些,但是只能看到ments,看不到提交的用户和日期。

我们简单的描述一个例子:a)初始化操作有两个文件file1.txt和file2.txt1,初始化的时候就有这两个文件操作:git initgit statusgit add.git mit-m“init version”2,在master分支上修改了file1.txt,并提交操作:(修改file1.txt)git add file1.txtgit mit-m“change file1”3,然后新建分支banana,并切换到banana分支上操作:git branch bananagit checkout banana4,修改file1.txt和file2.txt,并提交。

操作:(修改file1.txt和file2.txt)git add file1.txt file2.txtgit mit-m“change by banana”这个时候,我们可以输入 gitk,查看一下当前的版本情况。如下图:git-0015,然后,切换到master分支上,修改file2.txt,并提交。

操作:git checkout master(修改file2.txt)git add file2.txtgit mit-m“change by master”输入gitk,查看当前版本情况,如下图:git-002b)发现问题需要查看历史版本我们现在发现当前的版本有点问题,还不能提交到版本库。1,我们需要从git mit中返回.则输入:git reset--soft HEAD^解释一下,HEAD是当前分支的最新版本。

^表示父节点。当前节点的父节点,就是上一次提交的版本。

也就是标记为“change file1”的版本。问为什么不是”change by banana”这个版本呢?不同的分支哦。”

change by banana”是banana分支的最新代码,和master分支不同的。这个时候输入git status看看,是不是显示file2.txt修改了没有提交呢。

2,我们需要从git add中返回再仔细查看之后,我们发现file2.txt真的写错了,需要返回到git add之前的状态。输入:git reset-q file2.txt这个时候,file2.txt就回到了解放前了。

用git status查看一下,file2.txt是”change not staged for mit”状态。3,回到没有做过的情况我们最终确定,最后一次修改的file2.txt是无用的代码,我们需要废弃掉。

注意,这个操作不能恢复的哦。git reset--hard这个命令,不能指定具体的文件。

是把当前的修改全部清除,恢复到最后一次提交的版本。这个时候,用gitk查看一下:git-003已经彻底回复到了“change file 1”的版本了。

4,直接回复到某个版本我们现在切换到banana分支。git checkout banana然后用gitk看一下。

可以看出,我们之前的操作,对banana分支一点影响也没有。现在我们需要把banana分支回复到初始状态,但是当前的改动的代码还是需要留着。

我们可以看,init版本是当前版本的父节点的父节点。我们可以这么操作:git reset--soft HEAD^^然后用gitk看一下:git-004最近的版本已经变成了init version了。

所有的改动都是add未提交状态。5,得到当前最新代码最后。

我们把file1.txt和file2.txt都删掉。我们需要从版本库中取得当前最新的代码。

很简单:git checkout master如果是要banana分支的最新代码,则:git checkout banana以上的操作,我们知道了如何查看版本分支,和如何回复到以前的版本。

git怎么创建本地版本仓库安装git我就不用说了吧!下载地址:/msysgit/msysgit/releases/download/Git-1.9.4-preview20140815/Git-1.9.4-preview20140815.exe安装完后点击桌面Git Bash:命令如下$ mkdir testcms$ cd testcms$ pwd/Users/my-pc/testcmspwd命令用于显示当前目录。

在我的机器上,这个仓库位于\Users\my-pc\test\testcms。如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。

第二步,通过git init命令把这个目录变成Git可以管理的仓库:$ git initInitialized empty Git repository in/Users/my-pc/testcms/.git/瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的开发者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。也不一定必须在空目录下创建Git仓库,选择一个已经有东西的目录也是可以的。

不过,不建议你使用自己正在开发的公司项目来学习Git,否则造成的一切后果概不负责。把文件添加到版本库首先这里再明确一下,所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。

版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。

不幸的是,Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的,前面我们举的例子只是为了演示,如果要真正使用版本控制系统,就要以纯文本方式编写文件。因为文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。

使用Windows的童鞋要特别注意:千万不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题,比如,网页第一行可能会显示一个“?”,明明正确的程序一编译就报语法错误,等等,都是由记事本的弱智行为带来的。

建议你下载Notepad++代替记事本,不但功能强大,而且免费!记得把Notepad++的默认编码设置为UTF-8 without BOM即可:set-utf8-notepad++言归正传,现在我们编写一个test.txt文件,内容如下:Git is a version control system.Git is free software.一定要放到testcms目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。和把大象放到冰箱需要3步相比,把一个文件放到Git仓库只需要两步。

第一步,用命令git add告诉Git,把文件添加到仓库:$ git add test.txt执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。第二步,用命令git mit告诉Git,把文件提交到仓库:$ git mit-m"wrote a test file"[master(root-mit) cb926e7] wrote a test file 1 file changed, 2 insertions(+) create mode 100644 test.txt简单解释一下git mit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

嫌麻烦不想输入-m"xxx"行不行?确实有办法可以这么干,但是强烈不建议你这么干,因为输入说明对自己对别人阅读都很重要。实在不想输入说明的童鞋请自行Google,我不告诉你这个参数。

git mit命令执行成功后会告诉你,1个文件被改动(我们新添加的test.txt文件),插入了两行内容(test.txt有两行内容)。为什么Git添加文件需要add,mit一共两步呢?因为mit可以一次提交很多文件,所以你可以多次add不同的文件,比如:$ git add test1.txt$ git add test2.txt$ git add test3.txt$ git mit-m"add 3 files."现在总结创建git仓库分为三步:第一步初始化一个Git仓库,使用git init命令。

添加文件到Git仓库:•第二步,使用命令git add,注意,可反复多次使用,添加多个文件;•第三步,使用命令git mit,完成。这种用命令的方式感觉还是用svn好用,但是对于分布式版本控制来说git是最好的选择。

命令:git log默认不加参数,git日志会按照最新的日期从上往下显示参数:-p显示版本间的代码差异

--since="5 hours"显示最近5小时内的提交--since="5 hours"-1显示5小时内的最后一个提交--before用法和--since的用法差不多,显示的是在某个时间点之前的提交版本1..版本2说明:版本1之后到版本2的所有提交,版本2可以用 HEAD(要注意大写)表示当前的最新版本版本^回溯一个版本注意:在windows下要加双引号"版本^"~N:回溯N个版本

git diff版本号说明:当前目录树和对应版本号的差异 git diff--stat说明:统计对应改动的代码量

4.1增补修改(只能用于针对最后一个提交)

创建一个新的反向的提交来抵消原来的提交

git revert-n HEAD反转当前版本库最新的提交并且缓存起来。但是不提交

git reset--soft缓存因复位带来的差异但是不提交,也就是复位到上一个提交前的状态 git reset--hard同时删除提交例子:git reset--hard HEAD^复位到HEAD之前的那个版本

本质上利用的是变基操作,定位到你想变化的范围之前。然后进入编辑器去修改你想修改的部分。完成之后再回到当前的末梢。

首先,我们打开webstorm软件,然后找到项目里面的同时也在版本库中存在的文件。

打开文件后,我们点击编辑器上方菜单中"VCS"选项,在弹出的菜单列表中选择“GIT”

点击后又会有一个级联菜单出现,里面的选项基本上就是git的一些常见操作,我们选择“show history”选项,来查看文件的历史版本及相应改动。

我们可以看到软件下方有一个弹出的界面有在这个文件名字下面有一个表格,表格的标题依次对应的是“版本号”、“日期”、“作者”、“mit信息”

然后我们随便点击一个版本所在行,就会弹出一个两个版本的文件的比较界面,左边是上一个版本,右边是最新版本

两个版本相比较,以行的变动作为变动,我们可以看到绿色背静的代码是新添加的,蓝色背景的是有改动的部分。

给历史记录重新排序多个提交合并成一个提交一个提交分解成多个提交git rebase-i HEAD~3本质上利用的是变基操作,定位到你想变化的范围之前.指定查找范围:--since="5 hours"。

然后进入编辑器去修改你想修改的部分:版本1之后到版本2的所有提交,版本2可以用 HEAD(要注意大写)表示当前的最新版本版本^回溯一个版本注意:在windows下要加双引号":git log默认不加参数,git日志会按照最新的日期从上往下显示参数;-1显示5小时内的最后一个提交--before用法和--since的用法差不多:-p显示版本间的代码差异-数字显示部分的提交-哈希值显示指定的版本2..版本2说明;版本^"~N:回溯N个版本3;显示最近5小时内的提交--since="5 hours".3复位git reset--soft缓存因复位带来的差异但是不提交,也就是复位到上一个提交前的状态 git reset--hard同时删除提交例子:git reset--hard HEAD^复位到HEAD之前的那个版本5重新改写历史记录什么时候需要改写历史记录,显示的是在某个时间点之前的提交版本1.查看指定版本之间的差异git diff版本号说明:当前目录树和对应版本号的差异 git diff--stat说明:统计对应改动的代码量4.撤销修改4.1增补修改(只能用于针对最后一个提交)git mit-C HEAD-a--amend4.2反转提交创建一个新的反向的提交来抵消原来的提交git revert-n HEAD反转当前版本库最新的提交并且缓存起来。但是不提交41.查看Git日志:命令。

在windows系统客户端安装git工具。

注:如何安装git工具在此不做介绍,如需了解可网上搜索安装介绍。

在“本地文件”中添加“.git文件”,用于git管理。

进入本地文件夹,右击鼠标-单击Git Init Here-生成.git文件夹。

在github创建仓库用于存储管理本地文件,示例:Blog。

点击账号前的加号(Create New)--New repository,根据引导创建一个Blog仓库。

1)进入本地文件夹下-右击鼠标-Git Gui-远端(remote)-Add。

2)获取github中Blog仓库的地址。

3)在Add Remote窗口中填写名字、Location。

Location:粘贴刚刚复制的Blog仓库路径

将本地文件内容即“已缓存的改动”,提交git管理的master分支上。

单击Git Gui界面“上传”--“上传”窗口随意勾选一个或多个传输选项--点击“上传”--上传Blog过程中需要输入github的登录账号和密码。

在github上查看本地文件Blog项目是否上传成功。

三、git查看历史版本

一、git获取历史版本的几种方式

我们简单的描述一个例子:a)初始化操作有两个文件file1.txt和file2.txt1,初始化的时候就有这两个文件操作:git initgit statusgit add.git mit-m“init version”2,在master分支上修改了file1.txt,并提交操作:(修改file1.txt)git add file1.txtgit mit-m“change file1”3,然后新建分支banana,并切换到banana分支上操作:git branch bananagit checkout banana4,修改file1.txt和file2.txt,并提交。

我们简单的描述一个例子:a)初始化操作有两个文件file1.txt和file2.txt1,初始化的时候就有这两个文件操作:git initgit statusgit add.git mit-m“init version”2,在master分支上修改了file1.txt,并提交操作:(修改file1.txt)git add file1.txtgit mit-m“change file1”3,然后新建分支banana,并切换到banana分支上操作:git branch bananagit checkout banana4,修改file1.txt和file2.txt,并提交。

操作:(修改file1.txt和file2.txt)git add file1.txt file2.txtgit mit-m“change by banana”这个时候,我们可以输入 gitk,查看一下当前的版本情况。如下图:git-0015,然后,切换到master分支上,修改file2.txt,并提交。

操作:git checkout master(修改file2.txt)git add file2.txtgit mit-m“change by master”输入gitk,查看当前版本情况,如下图:git-002b)发现问题需要查看历史版本我们现在发现当前的版本有点问题,还不能提交到版本库。1,我们需要从git mit中返回.则输入:git reset--soft HEAD^解释一下,HEAD是当前分支的最新版本。

^表示父节点。当前节点的父节点,就是上一次提交的版本。

也就是标记为“change file1”的版本。问为什么不是”change by banana”这个版本呢?不同的分支哦。”

change by banana”是banana分支的最新代码,和master分支不同的。这个时候输入git status看看,是不是显示file2.txt修改了没有提交呢。

2,我们需要从git add中返回再仔细查看之后,我们发现file2.txt真的写错了,需要返回到git add之前的状态。输入:git reset-q file2.txt这个时候,file2.txt就回到了解放前了。

用git status查看一下,file2.txt是”change not staged for mit”状态。3,回到没有做过的情况我们最终确定,最后一次修改的file2.txt是无用的代码,我们需要废弃掉。

注意,这个操作不能恢复的哦。git reset--hard这个命令,不能指定具体的文件。

是把当前的修改全部清除,恢复到最后一次提交的版本。这个时候,用gitk查看一下:git-003已经彻底回复到了“change file 1”的版本了。

4,直接回复到某个版本我们现在切换到banana分支。git checkout banana然后用gitk看一下。

可以看出,我们之前的操作,对banana分支一点影响也没有。现在我们需要把banana分支回复到初始状态,但是当前的改动的代码还是需要留着。

我们可以看,init版本是当前版本的父节点的父节点。我们可以这么操作:git reset--soft HEAD^^然后用gitk看一下:git-004最近的版本已经变成了init version了。

所有的改动都是add未提交状态。5,得到当前最新代码最后。

我们把file1.txt和file2.txt都删掉。我们需要从版本库中取得当前最新的代码。

很简单:git checkout master如果是要banana分支的最新代码,则:git checkout banana以上的操作,我们知道了如何查看版本分支,和如何回复到以前的版本。

命令:git log默认不加参数,git日志会按照最新的日期从上往下显示参数:-p显示版本间的代码差异

--since="5 hours"显示最近5小时内的提交--since="5 hours"-1显示5小时内的最后一个提交--before用法和--since的用法差不多,显示的是在某个时间点之前的提交版本1..版本2说明:版本1之后到版本2的所有提交,版本2可以用 HEAD(要注意大写)表示当前的最新版本版本^回溯一个版本注意:在windows下要加双引号"版本^"~N:回溯N个版本

git diff版本号说明:当前目录树和对应版本号的差异 git diff--stat说明:统计对应改动的代码量

4.1增补修改(只能用于针对最后一个提交)

创建一个新的反向的提交来抵消原来的提交

git revert-n HEAD反转当前版本库最新的提交并且缓存起来。但是不提交

git reset--soft缓存因复位带来的差异但是不提交,也就是复位到上一个提交前的状态 git reset--hard同时删除提交例子:git reset--hard HEAD^复位到HEAD之前的那个版本

本质上利用的是变基操作,定位到你想变化的范围之前。然后进入编辑器去修改你想修改的部分。完成之后再回到当前的末梢。

给历史记录重新排序多个提交合并成一个提交一个提交分解成多个提交git rebase-i HEAD~3本质上利用的是变基操作,定位到你想变化的范围之前.指定查找范围:--since="5 hours"。

然后进入编辑器去修改你想修改的部分:版本1之后到版本2的所有提交,版本2可以用 HEAD(要注意大写)表示当前的最新版本版本^回溯一个版本注意:在windows下要加双引号":git log默认不加参数,git日志会按照最新的日期从上往下显示参数;-1显示5小时内的最后一个提交--before用法和--since的用法差不多:-p显示版本间的代码差异-数字显示部分的提交-哈希值显示指定的版本2..版本2说明;版本^"~N:回溯N个版本3;显示最近5小时内的提交--since="5 hours".3复位git reset--soft缓存因复位带来的差异但是不提交,也就是复位到上一个提交前的状态 git reset--hard同时删除提交例子:git reset--hard HEAD^复位到HEAD之前的那个版本5重新改写历史记录什么时候需要改写历史记录,显示的是在某个时间点之前的提交版本1.查看指定版本之间的差异git diff版本号说明:当前目录树和对应版本号的差异 git diff--stat说明:统计对应改动的代码量4.撤销修改4.1增补修改(只能用于针对最后一个提交)git mit-C HEAD-a--amend4.2反转提交创建一个新的反向的提交来抵消原来的提交git revert-n HEAD反转当前版本库最新的提交并且缓存起来。但是不提交41.查看Git日志:命令。

这是git中使用平率非常高的一个操作,git中查看提交历史的功能也非常强大,提供各种筛选和输出格式定制功能。

最简单的,运行git log命令,你将看到一个详细的提交日志:

信息内容都很好理解,重点说说第一行mit后这个40个字符的字符串,这是该次提交的对应的SHA-1值,在git中,会对提交(mit)、文件(blob)、目录(tree)、标签(tag)生成一个唯一的SHA-1值,git就是基于此来得知文件或目录的改动,因为这四类对象计算得到的SHA-1值都是唯一的,同时你也可以直接使用SHA-1值来指代相应的对象。比如:

git log还有很多命令选项来定制历史记录

–since,–after仅显示指定时间之后的提交

–until,–before仅显示指定时间之前的提交

–author仅显示指定作者相关的提交

–mitter仅显示指定提交者相关的提交

-p按补丁格式显示每个更新之间的差异

–stat显示每次更新的文件修改统计信息

–shortstat只显示–stat中最后的行数修改添加移除统计

–name-only仅在提交信息后显示已修改的文件清单

–name-status显示新增、修改、删除的文件清单

–abbrev-mit仅显示 SHA-1的前几个字符,而非所有的 40个字符

–relative-date使用较短的相对时间显示(比如,“2 weeks ago”)

–graph显示 ASCII图形表示的分支合并历史

第一步: git log查看之前的mit的id,找到想要还原的版本第二步: git reset--hard 44bd896bb726be3d3815f1f25d738a9cd402a477还原到之前的某个版本第三步: git push-f origin master强制push到远程前两步在eclipse中也可操作: team--> show in hostory找到想还原的版本然后再强制push(git push-f origin master)。

有些时候,在一些特殊情况下,我们需要将代码恢复到一个历史的提交版本上。

而这个历史提交版本,离最新的提交已经比较久远了。比如,我希望将如下的仓库的提交,恢复到上上上上次提交。

当然,我可以一次一次的 revert,但是有没有更快更简单的办法呢?暴力的方式如果你的仓库是自己在用(不影响别人),那么你可以使用 git reset--hard来恢复到指定的提交,再用 git push-f来强制更新远程的分支指针。为了保证万一需要找回历史提交,我们可以先打一个 tag来备份。

对于刚刚的例子,需要执行的命令就是://备份当前的分支到 backup_mitgit tag backup_mitgit push origin backup_mit//重置 source分支git reset--hard 23801b2//强制 push更新远程分支git push origin source-f温和的方式如果你的仓库是多人在协作,那么你这么操作会使用别人本地的代码库混乱,所以只能建一个新的提交,这个新的提交中把想取消的提交都 revert掉,那么具体应该如何做呢?方法如下:首先,和刚刚一样,用 git reset--hard 23801b2将代码切换到目标提交的 id。接下来,用 git reset--soft origin/source命令,将当前代码切换回最新的提交。

执行完上面两步后,你的仓库还是最新的提交,但是工作区变成了历史的提交内容,这个时候用 git add和 git mit即可。最终完成的效果如下:不过经过念茜的提醒,该方法需要保证 reset的时候没有别人做新的提交,如果有的话,会一并把别人的提交也撤销了。

所以还是挺危险的,慎用。虽然用到的时候很少,但是理解它的原理有助于大家理解 Git的工作区,暂存区和版本库的各种指针操作的意义,希望对大家有用。

#git reflog git log--pretty=oneline结果如下:69e1506ad9fed9771b9f7d1e478ac2ff05fc3604 Add git user profile functions for prompt displayc4582777fc50162d8b433cabad34f629b0ea9b98 Merge pull request#4957 from TorrentKatten/mastere8a9d0ee1a97033fb4aa371263889b77200b6d62 localization support for clock in candy themec3b3de5f29b72b45393b62d794450ad3a72703a8 Merge pull request#4956 from RobLoach/asdf616ac67924212df2f75139c94ca323f13f249dc6 Add'asdf' plugin。

关于本次git命令统计代码和git命令大全(非常齐全)的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。