今天将要跟大家讲解下Magento 2多人开发工具GIT,Git是目前被称为是开发项目最流行的版本控制系统。于是在网上看了有关学习资料就顺手学习了一边,学习GIT的时间大概8个小时基本把GIT理的很清楚,我感觉学了GIT了之后他简直太厉害了,方便快速,不愧是版本控制系统的NO.1。
接下来我将把我所学的知识给大家分享出来,希望通过这篇教程你能学到从一个小白到精通的GIT大神。包括GIT能够帮助大家进行管理项目具有非常好的功能深受大家的爱戴。目前作为Magento 2开发的必选工具,具有高度的灵活性、安全性。
GIT介绍
Git是目前开发项目最流行的版本控制系统,并且是分布式的,不像SVN的集中式管理。Git是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有事务。Git 易于学习, 占地面积小,具有闪电般快速的性能。它超越了Subversion,CVS,Perforce和ClearCase等SCM工具,具有廉价本地分支,便捷的临时区域和 多个工作流程等功能。
Git是一个强调速度的分布式修订控制和源代码管理系统。Git最初是由Linus Torvalds为Linux内核开发而设计和开发的。Git是一个根据GNU通用公共许可证版本2条款发布的自由软件。本教程解释了如何在分布式环境中使用Git进行项目版本控制,同时进行基于web和非基于web的应用程序开发。
为什么选用GIT,而不是SVN
最关键的区别在于GIT是分散的。想象一下如果你是一名开发人员,你可以在笔记本电脑上进行开发,并希望拥有源代码控制,这样你就可以回到2个小时之前的操作。
使用Subversion(SVN),您遇到了一个问题:SVN存储库可能位于您无法访问的位置(在您的公司中,目前您还没有Internet),您无法提交。如果要复制代码,则必须逐字复制/粘贴它,这样非常浪费时间,效率极低。
有了Git,你没有这个问题。您的本地副本是一个存储库,您可以提交它并获得源代码管理的所有好处。当您重新获得与主存储库的连接时,您可以对其进行提交。
Git似乎是“最新的,最好的,最酷的”东西。Git真正闪耀的地方是分支并与其他人合作。所以作为全球最流行的电子商务平台Magento 2也选用了他作为开发工具。
通过以上了解相信你对GIT有了一个初步的了解了吧,如果你还想更深入的学习请继续往下阅读。
GIT分布式系统和SVN集中式系统
1.集中式系统
我们从集中式系统开始,因为它们是最直观,易于理解和定义的。
集中式系统是使用客户端/服务器架构的系统,其中一个或多个客户端节点直接连接到中央服务器。这是许多组织中最常用的系统类型,其中客户端向公司服务器发送请求并接收响应。
例如:以百度百科为例子。当我们发送请求的大型服务器,服务器响应我们请求的文章。 假设我们在百度百科搜索栏中输入搜索词“SKY8G网站”。该搜索项作为请求发送到百度百科服务器(主要位于北京),然后基于相关性回复文章。在这种情况下,我们是客户端节点,百度百科服务器是中央服务器。
集中系统的特点-
- 存在全局时钟:由于整个系统由中央节点(服务器/主站)和许多客户机节点(计算机/从站)组成,所有客户机节点与全局时钟(中央节点的时钟)同步)。
- 一个中央单元:一个中央单元,用于/协调系统中的所有其他节点。
- 组件的相关故障:中央节点故障导致整个系统发生故障。这是有道理的,因为当服务器关闭时,没有其他实体可以发送/接收响应/请求。
集中系统的优势 –
- 易于物理安全。通过它们的位置,很容易保护和服务服务器和客户机节点
- 流畅优雅的个人体验 – 客户拥有他使用的专用系统(例如,个人计算机),公司拥有类似的系统,可根据客户需求进行修改
- 专用资源(内存,CPU内核等)
- 对于小型系统而言,在一定限度内更具成本效益 – 由于中央系统需要较少的资金来建立,因此在需要建立小型系统时它们具有优势
- 可以进行快速更新 – 只需一台机器进行更新。
- 容易从系统中分离节点。只需从服务器上删除客户端节点的连接即可!节点已分离。
集中系统的缺点 –
- 高度依赖于网络连接 – 如果节点失去连接,系统可能会失败,因为只有一个中心节点。
- 没有优雅的系统退化 – 导致整个系统的突然失败
- 减少数据备份的可能性。如果服务器节点发生故障且没有备份,则会立即丢失数据
- 维护服务器比较困难- 只有一个服务器节点,并且由于可用性原因,将服务器关闭以进行维护是低效且不专业的。因此,必须即时(热更新)进行更新,这很困难,系统可能会中断。
2.分布式系统
这是我们要讨论的最重要一种系统。让我们进入学习它吧!
在分散式系统中,每个节点都做出自己的决定。系统的最终行为是各个节点的决策的集合。请注意,没有单个实体接收和响应请求。
例如:daidu搜索系统。每个请求都由数百台计算机处理,这些计算机对Web进行爬网并返回相关结果。对于用户来说,baidu似乎是一个系统,但它实际上是多台计算机一起工作以完成一项任务(将结果返回到搜索查询)。
分布式系统的特点 –:
- 组件的并发性:节点应用共识协议来同意相同的值/事务/命令/日志。
- 缺少全局时钟:所有节点都保持自己的时钟。
- 组件的独立故障:在分布式系统中,节点独立地失败而不会对整个系统产生显着影响。如果一个节点发生故障,则整个系统无法继续运行故障节点。
分布式系统的优点 –
- 低延迟比集中式系统 – 分布式系统由于地理分布广泛而具有低延迟,因此导致获得响应的时间更短
分布式系统的缺点 –
- 不能通过它们发生的绝对时间来记录事件的传统方式
所以通过以上的了解你可以知道为什么选优GIT工具开发Magento 2了,因为Magento 2是开源的电子商务平台,他是由全球的爱好Magento 2程序员开发的。
Git vs GitHub
GIT: 就是一个修订控制系统,一个管理源代码历史的工具。
GitHub: 是一个针对Git存储库的托管服务。
在项目开始的时候,只有一个原始版本库(版本库也叫仓库),别的客户端(电脑机器)可以clone这个原始版本库,那么所clone的这个机器的代码项目和仓库版本库其实都是一样的,并没有主次之分。
所以团队协作开发的时候,这样就做到版本的控制,找一台电脑充当服务器的角色,24小时不断的工作,其他每个人都从这个“服务器”仓库clone一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。
如果没有搭建服务器怎么办?别急,路无绝人之路,这时我们就用GitHub。这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。
什么是Git? – Git vs GitHub
GitHub还是一个开源协作社区,通过GitHub,既可以让别人参与你的开源项目,也可以参与别人的开源项目。
要了解git和GitHub之间的确切区别,首先需要了解版本控制。那么,您对术语版本控制有何了解?
版本控制是指一种系统,它记录随时间变化的文件或文件集,称为“版本”。换句话说,这些版本将帮助您跟踪代码/项目中的更改,并在必要时撤消这些更改。在处理更大的项目时,能够在特定项目的两个版本之间进行比较,区分和还原更改的这一功能变得非常有用。较大的项目意味着更多的人使用相同的代码,这增加了冲突的可能性。使用版本控制可以轻松防止这些冲突。
控制代码版本控制的该系统称为版本控制系统(VCS)。为了获得更好的图片,您可以将其视为“数据库”。在此数据库中,VCS会拍摄整个项目的快照并将其存储为版本。现在借助这些快照,您可以轻松地比较版本并根据需要在它们之间切换。查看下面的图片,其中显示了整个过程:
我想现在你清楚地理解了版本控制的概念。我想在这里提一件事是,不要在VCS和备份/部署系统之间混淆。与备份系统不同,此VCS完全消除了更换或更换工具链的需要。下面我列出了使用版本控制的一些优点:
- 版本控制创建了适当的工作流程,有助于防止人们使用自己的开发过程与不同的和不兼容的工具之间的混乱。
- 每个版本都描述了此版本的更改内容。这些描述有助于按版本跟踪代码中的更改。
- VCS会同步这些版本,并确保您的更改不会与使用相同存储库的其他更改发生冲突。
- VCS有助于保留更改历史记录,因为其他人可以保存代码的新版本。可以查看此历史记录,以找出由谁,为什么以及何时进行更改。
- VCS自动化功能可以节省您的团队时间,并通过在保存任何新版本时执行测试,代码分析和部署来生成一致的结果。
现在您已了解版本控制,您将很容易理解Git。那么,Git是什么?
Git是一个版本控制软件,您需要在本地系统上安装才能使用它。对于仅在项目中工作的人来说,Git被证明是一款出色的软件。但是,如果您正在与一个大型团队合作开展项目,该怎么办?所有人都将在同一个项目上工作,但你们每个人都将拥有同一个项目的不同版本。假设您已在计算机上的项目目录中进行了更改,并且希望将这些更改发送给协作者。此外,您希望他们所做的更改直接显示在计算机的项目目录中。在项目上工作时,与队友在同一页上对于避免任何类型的冲突至关重要。那么,你将如何做到这一点?好吧,不用担心Git会照顾好所有,但这里唯一的条件是,你的每个团队成员必须在他们的系统上安装Git。
Git也被称为 分布式版本控制系统,这意味着使用Git,您可以推送和拉取您的以及其他人对其他人的机器的更改:
现在,使用Git,您可以使用与团队成员相同的副本。但是,您将使用的副本不会反映主目录中的任何更改,除非您拉出协助作者的更改并推送自己的更改,被作者所接受采纳。
在今天的市场中,Git是最广泛和最常用的现代VCS。它非常成熟,是一个维护良好的开源项目。它是由Linus Torvalds于2005年开发的,他也是Linux OS内核的创建者。如果您查看上面的Google趋势结果图片,您会发现Git自2005年以来一直在市场上不断发展。不同数量的软件项目,包括商业和开源,完全依赖Git进行版本控制。那么,Git与其他如何受欢迎的不同之处呢?
Git与任何其他VCS(如Subversion(SVN),Mercurial,TFS,Perforce,Bazaar等)之间的主要区别在于Git存储其数据的方式。在其他系统中,信息存储为基于文件的更改列表,也称为 基于增量的 版本控制。但是在Git的情况下,它以微型文件系统的快照流的形式存储其数据。使用Git,无论何时提交或保存项目状态,都会获取当前文件状态的快照,并为其存储引用。如果没有进行任何更改或更新,则Git会存储指向已存储的上一个文件的链接。下图显示了Git如何存储版本:
但是当你知道你的协作者的系统何时开启并连接到网络时,Git才会有所帮助。那么当你的团队成员不在线时你会怎么做?在这些情况下,第三方拥有相同的项目副本,您可以轻松地推送和拉取更改,这将派上用场。
好吧,你会很高兴地知道,这就是GitHub所做的,在Git vs GitHub的博客的下一部分中,我将解释所有相关内容。
什么是GitHub? – Git vs GitHub
据说,Git是一个版本控制系统,它跟踪使用计算机代码时的变化,而 GitHub 是一个基于Web的Git版本控制存储库托管服务。它提供了Git的所有分布式版本控制和源代码管理(SCM)功能,同时具有一些自己的功能。对于 开发者来说,这是一个天堂,他们可以存储他们的项目,并与志同道合的人建立联系。您可以将其视为“代码云”。
所以基本上它是一个存储相同工作目录或 存储库的地方。它实际上是Git存储库的中心,您可以使用它,只需在GitHub上创建一个免费帐户即可。这些帐户具有丰富的存储空间,您可以在其中存储存储库并构建具有很高价值的正确配置文件。默认情况下,存储库是公共的,即每个人都可以看到您的代码,但您也可以将其设为私有。因此,如果您是一名优秀的程序员,您可以上传自己的应用程序和程序,并获得其他人的认可。
它与Git的合作一起工作。虽然Git是一个命令行工具,但GitHub是一个基于Web的图形界面,它为您提供访问控制,基本任务管理工具以及多个协作功能。此外,GitHub可以使用各种编程语言托管项目的源代码,并跟踪每次迭代所做的每个更改。GitHub的功能并没有在这里结束。它提供了以下3个非凡功能,使其如此强大:
- fork(分叉):或者通常称为分叉是在您没有写入权限时从一个用户的帐户复制存储库。所以你可以复制它并在你自己的帐户下修改它。
- pull(拉取): 当您对已复制的代码进行更改并希望与原始订单共享时。然后,您可以向他们发送称为“拉取请求”的通知。
- merge(合并):现在,作为这些代码的所有者的用户,如果发现您的更改相关,则可以通过按钮单击将您的仓库中找到的更改与原始仓库合并。
如果所有者接受了您的提款请求,那么您将获得原始网站的赠送金额并显示在您的用户个人资料中。这是一种简历,可以帮助GitHub项目维护者确定您的声誉。因此,更多关于GitHub的人员和项目,项目维护者更好地了解其潜在贡献者。这鼓励年轻的开发者和项目在行业中发展壮大。我希望你现在明白什么是Github。那么现在让我总结一下Git和Github之间的基本区别。
Git vs GitHub
1.这是一个软件 | 1.这是一项服务 |
2.它本地安装在系统上 | 2.它托管在Web上 |
3.它是一个命令行工具 | 3.它提供了一个图形界面 |
4.它是一个管理不同版本的编辑工具,用于git存储库中的文件 | 4.上传Git 存储库副本的空间 |
5.它提供了版本控制系统源代码管理等功能 | 5.它提供了Git的功能,如VCS,源代码管理以及添加自己的一些功能 |
通过上面的讲解相信你一定对GIT和GITHUB都很清楚了吧。接下来就让我们学习GIT吧!
GIT安装
目前GIT支持Linux/Unix、Mac OS X和Windows ,如下图:当前最新的Windows GIT版本为2.22.0。
在 Linux 安裝
如果你想在 Linux 上用二进制安装程序来安装 Git,可以使用发行版包含的基础软件包管理工具来安装。 如果以 Fedora 、CentOS上为例,你可以使用 yum:
1 | $ sudo yum install git |
如果你在基于 Debian 的发行版上,请尝试用 apt-get:
1 | $ sudo apt-get install git |
要了解更多选择,Git 官方网站上有在各种 Unix 风格的系统上安装步骤,网址为 http://git-scm.com/download/linux。
在 Mac 上安装
在 Mac 上安装 Git 有多种方式。 最简单的方法是安装 Xcode Command Line Tools。 Mavericks (10.9) 或更高版本的系统中,在 Terminal 里尝试首次运行 git 命令即可。 如果没有安装过命令行开发者工具,将会提示你安装。
如果你想安装更新的版本,可以使用二进制安装程序。 官方维护的 OSX Git 安装程序可以在 Git 官方网站下载,网址为 http://git-scm.com/download/mac。
Figure 7. Git OS X 安装程序.
你也可以将它作为 GitHub for Mac 的一部分来安装。 它们的图形化 Git 工具有一个安装命令行工具的选项。 你可以从 GitHub for Mac 网站下载该工具,网址为 http://mac.github.com。
在 Windows 上安装
在 Windows 上安装 Git 也有几种安装方法。 官方版本可以在 Git 官方网站下载。 打开 http://git-scm.com/download/win,下载会自动开始。 要注意这是一个名为 Git for Windows 的项目(也叫做 msysGit),和 Git 是分别独立的项目;更多信息请访问 http://msysgit.github.io/。
另一个简单的方法是安装 GitHub for Windows。 该安装程序包含图形化和命令行版本的 Git。 它也能支持 Powershell,提供了稳定的凭证缓存和健全的换行设置。 稍后我们会对这方面有更多了解,现在只要一句话就够了,这些都是你所需要的。 你可以在 GitHub for Windows 网站下载,网址为 http://windows.github.com。
本篇教程主要是是windows安装的GIT教程,主要是去官网下载windows版本。点击下面下载: http://git-scm.com/download/win
下载后的图标如下图:
第1步骤:双击上面的GIT图标,双击后显示下图。
第2步骤:这是条款阅读,点击上图的”Next”按钮后,如下图所示。
第3步骤:这是选择自定义,可以选择创建桌面快捷方式也可以默认,如果想想创建点击第一个Additional icons,点击上图的”Next”按钮后,如下图所示,出现了下图所示。
第4步骤:这是选择自定义默认的编辑器,这里我们默认即可点击上图的”Next”按钮后,如下图所示,出现了下图所示。
第5步骤:这是选择自定义GIT环境变量,这里我们默认即可点击上图的”Next”按钮后,如下图所示,出现了下图所示。
第6步骤:这是选择自定义选择哪一个ssh,这里我们默认即可点击上图的”Next”按钮后,如下图所示,出现了下图所示。
第7步骤:这是选择自定义选择使用https安全传输后台,这里我们默认即可点击上图的”Next”按钮后,如下图所示,出现了下图所示。
第8步骤:这是选择自定义选择使用https安全传输后台,这里我们默认即可点击上图的”Next”按钮后,如下图所示,出现了下图所示。
第9步骤:这是选择自定义选择使用GIT系统的命令还是windows的,这里我们默认即可点击上图的”Next”按钮后,如下图所示,出现了下图所示。
第10步骤:这是选择自定义其他的选项,这里我们默认即可点击上图的”Next”按钮后,如下图所示,出现了下图所示。
第11步骤:这里我们默认即可点击上图的”Install”安装按钮后,如下图所示,出现了下图所示。
第12步骤:这里安装完成会出现,出现了下图所示。
第13步骤:这里安装完成点击”Finish”按钮,出现了下图所示。
安装完毕。
GIT的命令行操作教程
接下来我们将开始学习GIT的操作了,请继续往下阅读:首先我们在安装完成后查看下版本号。我们可以右击桌面选择”Git Bash Here”
GIT命令操作
让我们开始Git命令学习吧!!
在打开Git命令窗口后我们首先需要进行配置自己的GIT信息也就是:姓名和电子邮件地址。
git config
用法:git config -global user.name“[name]”
用法:git config -global user.email“[email address]”
此命令分别设置要与提交一起使用的作者姓名和电子邮件地址。
接下来我们就创建自己的【仓库区和工作区】也就是自己的项目管理的地方。
git init
用法:git init [存储库名称]
此命令用于启动(创建)新存储库。
1 2 3 4 5 6 7 8 9 10 11 12 | Hello@sky8g.com MINGW64 $ git config --global user.name "SKY8G" Hello@sky8g.com MINGW64 $ git config --global user.email "HelloG@sky8g.com" Hello@sky8g.com MINGW64 $ git init Initialized empty Git repository in F:/git-project/.git/ Hello@sky8g.com MINGW64 (master) $ |
通过上面的git init命令我们可以知道创建了项目仓库是在F:/git-project/.git/,其中:
.git目录:就是项目仓库。
git-project目录:是你的工作区。
(master):是你的主干,就是主要的分支其他的都是他的分支。
我们通过下面的命令可以看出工作区的内容。
1 2 3 | Hello@sky8g.com MINGW64 (master) $ ls -ah ./ ../ .git/ |
在初始仓库后就有这三个文件,其中前两个是隐藏的文件,最后一个是git仓库。好了我们建立项目仓库和项目的工作区。什么是仓库区和工作区?接下来就让我对GIT的流程
GIT的工作流程图
给大家介绍下吧,为了更好的说明和理解请看下图。
上面的这幅图是GIT的数据通过命令的操作进行传输的。
我们首先从左到右观看,一次为workspace、index、local repository和remote repository。他们是什么意思呢?
workspace(工作区):在工作目录中增加、删除、修改、查看文件,这是工作区。就是我们可以通过肉眼看到的文件确实存在。 已修改(modified)
index(索引区):索引区也称为已占存的区域或者叫(staged area),即是使用了git add . 则是储存在暂放区 .git/index ,他是单一的、大型的二进制文件。肉眼不可见 通过 git status
可以看到修改的状态。 已暂放 (staged)
local repository(本地仓库):就是上面我们创建的.git仓库也就是本地仓库,使用git commit -m “备注信息或版本号” 已提交(committed)
remote repository(远程仓库):这个就是你的github的账户创建的仓库了,使用命令:git push -u origin master提交的这个仓库里。
好了,通过以上的讲解这几个感念一定要清楚。否者不清楚往下学习会很吃力,希望你搞明白,不懂的话请在下方留言,我将为大家解答,祝你学习愉快!
接下来我们创建好了仓库就让我们使用他吧,这里我将讲述两个阶段:
第一阶段本地操作,既是:没有上传到远程仓库。
第二阶段远程操作,既是:上传远程仓库的操作
第一阶段本地操作
通过你这样你会很好的掌握GIT的用法:
首先让我们在主干上也叫做(master)或者叫主分支都是正确的,本教程后续都会用master分支做代表。在master分支上创建一个文件命令为magento-2.log文件,这里我们使用下面的命令。
1 2 3 4 5 6 7 8 9 10 | Hello@sky8g.com MINGW64 (master) $ touch magento-2.log Hello@sky8g.com MINGW64 (master) $ ll total 0 -rw-r--r-- 1 sky8g 197121 0 8月 10 09:41 magento-2.log Hello@sky8g.com MINGW64 (master) $ |
通过上面我们可以看到,创建了一个文件magento-2.log,接下来我们把创建的这个空的文件写入一些内容进去。请使用下面命令vim命令
1 2 | Hello@sky8g.com MINGW64 (master) $ vim magento-2.log |
通过使用vim magento-2.log命令行后,出现下面的界面,别担心这是使用git自带的vim编辑器的原因,相当于你进入了vim的窗口而不是刚才git的窗口了。
到了这个vim窗口后我们在最下面可以看到“magento-2.log”这几个字,这个时候你可以你可以按下键盘“i”键进入编辑模式,进行编辑。如下图
这个时候你的vim编辑器的窗口就可以看到了最下面的“插入”两个字了,这就是编辑模式。然后输入以上的内容即可。输入完后进行保存。
操作顺序: 1.首选按下“Esc”键进入命令模式,最后一行会出现空白。2.其次按住shit+:后会出现了一个冒号 。3.最后在冒号后按下“x”键后回车即可。
我们通过下面的cat的命令可以查看了。也可以直接查看你的工作目录git-project下有一个magento-2.log,点击查看他,也可以看到下面的一行的你刚才说创建的文字。
1 2 3 4 5 6 | Hello@sky8g.com MINGW64 (master) $ cat magento-2.log 欢迎你来到SKY8G网站学习GIT教程! Hello@sky8g.com MINGW64 (master) $ |
这个时候我们通过 GIT的流程图从左往右跟大家讲解,如图上的index库,这个时候我们可以查看下index临时仓的内容。通过下面的命令:
查看index临时库内容:git diff –name-only –cached
1 2 3 4 5 | Hello@sky8g.com MINGW64 (master) $ git diff --name-only --cached Hello@sky8g.com MINGW64 (master) $ |
可以看到没有输出任何信息。这时候我们把magento-2.log文件添加到index临时库里面。这是我们通过下面的命令添加。
添加工作区内容到index临时库内容:git add .或者git add 文件名(git add magento-2.log)
这里git add .表示添加当前目录的所有东西到index临时库里面。
1 2 3 4 5 6 7 | Hello@sky8g.com MINGW64 (master) $ git add . warning: LF will be replaced by CRLF in magento-2.log. The file will have its original line endings in your working directory Hello@sky8g.com MINGW64 (master) $ |
通过上面的命令我们看到有警告没关系的这个可以忽略掉。接下来我们再次查看index临时库内容
1 2 3 4 5 6 | Hello@sky8g.com MINGW64 (master) $ git diff --name-only --cached magento-2.log Hello@sky8g.com MINGW64 (master) $ |
看看,是不是很神奇,当然现在我们只是临时添加了index库,还是没有到本地仓库 (local repository)。接下来我们就可以查看到底有没有到本地仓库,口说无凭,眼见为实。我们通过下面的命令查看。
这个时候我们通过下面的代码 git ls-tree HEAD 查看本地仓库的内容:
查看本地当前仓库内容:git ls-tree HEAD
1 2 3 4 5 6 7 8 9 10 | Hello@sky8g.com MINGW64 (master) $ cat magento-2.log 欢迎你来到SKY8G网站学习GIT教程! Hello@sky8g.com MINGW64 (master) $ git ls-tree HEAD fatal: Not a valid object name HEAD Hello@sky8g.com MINGW64 (master) $ |
这个命令git ls-tree HEAD 是查看当前分支本地仓库内容,我们通过上面可以看到我们在master分支上,所以这是查看当前master本地仓库的内容。注意这个是当前分支不是其他的分支的本地仓库内容。
通过上面我们可以看到有报错:fatal: Not a valid object name HEAD,这是因为master分支没有本地仓库没有内容。
然后我们通过下面的命令进行提交到本地仓库 (local repository)
提交(添加)工作区内容到本地当前仓库:git commit -m “这个是第一个提交了magento-2.log到当前master分支的仓库”
1 2 3 4 5 6 7 8 | Hello@sky8g.com MINGW64 (master) $ git commit -m "这个是第一个提交了magento-2.log到当前master分支的仓库" [master (root-commit) a6a497e] 这个是第一个提交了magento-2.log到当前master分支的仓库 1 file changed, 1 insertion(+) create mode 100644 magento-2.log Hello@sky8g.com MINGW64 (master) $ |
我们再次通过git ls-tree HEAD命令查看当前仓库的内容。
1 2 3 4 5 6 | Hello@sky8g.com MINGW64 (master) $ git ls-tree HEAD 100644 blob 27410dbf5ac711ece4396cd5aa75198e1b5d3eb4 magento-2.log Hello@sky8g.com MINGW64 (master) $ |
哈哈,是不是有了,学到了这里想必大家都懂了这三个库workspace(工作库)、index(临时库)、local repository(本地库)之间的区别了吧。
总结
- git init 初始化(创建)本地仓库。
- git add . 添加内容到index仓库。
- git commit -m ‘提交说明’ 将内容提交到当前本地仓库。
知道了上面的命令操作以及含义后,接下来我们看看如何使用命令行查看这三个库workspace(工作库)、index(临时库)、local repository(本地库)的文件内容。
workspace(工作库)查看工作库内容,命令 cat magento-2.log
1 2 3 4 5 6 | Hello@sky8g.com MINGW64 (master) $ cat magento-2.log 欢迎你来到SKY8G网站学习GIT教程! Hello@sky8g.com MINGW64 (master) $ |
index(临时库)查看临时库内容,我们要使用命令 git diff ,我们通过下图来讲解便于理解。
git diff
显示工作库workspace目录和索引index库之间的差异。这将显示已更改的内容,但不会对提交进行。
git diff –cached
显示索引index库和HEAD(既是当前的local repository分支库)之间的更改(这是此分支上的最后一次提交)。这显示了添加到索引中的内容。
git diff HEAD
显示工作库workspace目录和HEAD(既是当前的local repository分支库)之间的所有更改(其中包括索引中的更改)。这将显示自上次提交以来的所有更改,无论这些更改是否已为提交而暂存。
所以我们要查看内容就是对比:此时我们使用命令
1 2 3 4 5 6 7 8 | Hello@sky8g.com MINGW64 (master) $ git diff --cached Hello@sky8g.com MINGW64 (master) $ git diff Hello@sky8g.com MINGW64 (master) $ |
通过上面两条命令我们可以看到没有任何输出,这就对了,因为我们没有改变他们的内容,现在我们通过vim命令改变下magento-2.log内容,如果不懂vim请阅读上面内容vim。
1 2 3 4 | Hello@sky8g.com MINGW64 (master) $ cat magento-2.log 欢迎你来到SKY8G网站学习GIT教程! 改变一下。。 |
更改完成后,保存。我们通过cat命令查看了一下,更改了内容如上面。再次通过命令git diff查看工作库和index库的区别
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Hello@sky8g.com MINGW64 (master) $ git diff warning: LF will be replaced by CRLF in magento-2.log. The file will have its original line endings in your working directory diff --git a/magento-2.log b/magento-2.log index 27410db..cff4404 100644 --- a/magento-2.log +++ b/magento-2.log @@ -1 +1,2 @@ 欢迎你来到SKY8G网站学习GIT教程! +改变一下。。 Hello@sky8g.com MINGW64 (master) $ |
通过上面我们可以看到,有了内容输出来了。说明我们改变了工作区的内容。再次查看index库和local repository当前本地库的区别。
1 2 3 4 5 | Hello@sky8g.com MINGW64 (master) $ git diff --cached Hello@sky8g.com MINGW64 (master) $ |
没有任何信息输出,这是因为目前index库的内容和local repository当前本地库内容一致,所以不显示任何信息。
local repository(本地库)查看本地当前库内容,我们要使用命令 git show HEAD:文件名
,如下操作。
查看本地当前库内容命令:git show HEAD:文件名
1 2 3 4 5 6 | Hello@sky8g.com MINGW64 (master) $ git show HEAD:magento-2.log 欢迎你来到SKY8G网站学习GIT教程! Hello@sky8g.com MINGW64 (master) $ |
我们可以看到本地库的内容依然是原来的。以上就是我们查看这三个库workspace(工作库)、index(临时库)、local repository(本地库)文件的内容。
GIT仓库分支
branch(分支)应该是Git最重要的技能了,在一个多人专案的开发过程中我们有时候要开发新功能,有时候是要修正某个Bug,有时候想要测试某个特异功能能不能work,这时候我们通常都会从主枝再开出一条新的分支来做,这支新开的分支会带着你的主分店目前的最新状态,当你完成你所要开发的新功能/ Bug修正后确认没问题就再把它合并(合并)回主分支,如此便完成了新功能的开发或是Bug的修正,因此每个人都可以从主分拉一条新的分支来做自己想做的事,再来我们好好了解一下branch的使用。
了解分支最好的方法就是有图像可以看,你可以用任何你已安装的GUI来查看,但在你安装Git的时候其实同时也安装了最基本的Git GUI叫做gitk,你可以使用gitk --all
这个指令来呼叫他。输出命令: gitk –all,在你的桌面弹出如下如所示。
1 2 3 4 5 6 | Hello@sky8g.com MINGW64 (master) $ git show HEAD:magento-2.log 欢迎你来到SKY8G网站学习GIT教程! Hello@sky8g.com MINGW64 (master) $ gitk --all |
此时你应该能看到以下的画面:
点击左上方区块的提交节点你可以看到当次提交的详细资料,例如作者以及他的更新记录,但你会发现这时候终端机是无法输入的,因此请你先关掉gitk,改打指令gitk --all &
来让gitk在背景后台执行。
查看本地的分支: git branch
git branch
这个指令可以列出所有的分支并告诉你目前正在哪个分支:
1 2 3 4 5 6 | Hello@sky8g.com MINGW64 (master) $ git branch * master Hello@sky8g.com MINGW64 (master) $ |
其中 *
号:表示的是 当前的分支。master
表示的是分支的名字。接下来我们在创建个分支,使用下面命令git branch 分支名字
。创建后再次查看分支,显示结果如下。
GIT创建分支
1 2 3 4 5 6 7 8 9 10 | Hello@sky8g.com MINGW64 (master) $ git branch sky8g.com Hello@sky8g.com MINGW64 (master) $ git branch * master sky8g.com Hello@sky8g.com MINGW64 (master) $ |
通过上面我们可以看到有两个分支一个是master分支
和sky8g.com分支
这两个分支。并且当前的分支还是master分支,让我们切换一下分支看看。
切换分支命令:git checkout 分支名字
切换分支使用命令git checkout 分支名字
。
1 2 3 4 5 6 7 8 9 10 11 | Hello@sky8g.com MINGW64 (master) $ git checkout sky8g.com Switched to branch 'sky8g.com' M magento-2.log Hello@sky8g.com MINGW64 (sky8g.com) $ git ls-tree HEAD 100644 blob 27410dbf5ac711ece4396cd5aa75198e1b5d3eb4 magento-2.log Hello@sky8g.com MINGW64 (sky8g.com) $ |
我们可以看到()括号里面的是sky8g.com分支了。
我们还可以通过查看当前的分支看看,使用的命令为git branch
1 2 3 4 5 6 7 | Hello@sky8g.com MINGW64 (sky8g.com) $ git branch master * sky8g.com Hello@sky8g.com MINGW64 (sky8g.com) $ |
可以看到那个星号在sky8g.com上面了。所以当前的分支就是sky8g.com 他的指针就是HEAD。
好了现在分支我们也有所了解了,是不是想知道如何让分支内容合并到主干分支上去,如果你想最后把项目推送到远程仓库必须由master分支推送的,所以必须要分支sky8g.com分支合并到master分支上去。
分支合并到主(master)分支上
首先我们所在的当前的分支为sky8g.com分支,那么我们在创建一个文件,例如:hello.js文件,如下操作。
1 2 3 4 5 6 7 8 9 10 11 12 | Hello@sky8g.com MINGW64 (sky8g.com) $ touch hello.js Hello@sky8g.com MINGW64 (sky8g.com) $ echo "var a=10;b=20;" >> hello.js Hello@sky8g.com MINGW64 (sky8g.com) $ cat hello.js var a=10;b=20; Hello@sky8g.com MINGW64 (sky8g.com) $ |
通过上面我们创建了hello.js文件,并且添加了内容 var a=10;b=20;
,再通过cat命令查看内容。这个时候我们在看看sky8g.com分支仓库里面的内容。
1 2 3 4 5 6 | Hello@sky8g.com MINGW64 (sky8g.com) $ git ls-tree HEAD 100644 blob 27410dbf5ac711ece4396cd5aa75198e1b5d3eb4 magento-2.log Hello@sky8g.com MINGW64 (sky8g.com) $ |
可以看到虽然我们创建了文件hello.js,但是我由于没有提交到仓库所以不会出现hello.js文件。我们在提交一下,在提交前我们必须要把文件添加到index临时库里面,这是GIT流程图,不知道请向上阅读。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Hello@sky8g.com MINGW64 (sky8g.com) $ git add . warning: LF will be replaced by CRLF in magento-2.log. The file will have its original line endings in your working directory warning: LF will be replaced by CRLF in hello.js. The file will have its original line endings in your working directory Hello@sky8g.com MINGW64 (sky8g.com) $ git commit -m "在分支仓库sky8g.com添加了hello.js文件" [sky8g.com 2d73c8f] 在分支仓库sky8g.com添加了hello.js文件 2 files changed, 2 insertions(+) create mode 100644 hello.js Hello@sky8g.com MINGW64 (sky8g.com) $ git ls-tree HEAD 100644 blob 4ccb06e647dc3050852736d81bab1b23aacecdf7 hello.js 100644 blob cff4404748013fd7edaa7b6dfdaf8a51c88c8e00 magento-2.log Hello@sky8g.com MINGW64 (sky8g.com) $ |
哈哈,看到了吗,我们刚才创建的文件hello.js出来了,这就是我们按照git的流程,执行的。所以必须把上面的图稿清楚。那么我们在看看主(master)支上的工作区内容。这里我们又要切换仓库了,请认真阅读。这是由sky8g.com分支切换到master主分支去的。使用下面切换分支命令:git checkout master
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Hello@sky8g.com MINGW64 (sky8g.com) $ git checkout master Switched to branch 'master' Hello@sky8g.com MINGW64 (master) $ git ls-tree HEAD 100644 blob 27410dbf5ac711ece4396cd5aa75198e1b5d3eb4 magento-2.log Hello@sky8g.com MINGW64 (master) $ ll total 1 -rw-r--r-- 1 sky8g 197121 44 8月 10 14:02 magento-2.log Hello@sky8g.com MINGW64 (master) $ |
通过上面我们可以看到,切换到主(master) 分支后,查看工作区的内容还是一个文件magento-2.log文件,为什么没有hello.js呢?
这是因为我们的那个sky8g.com分支的内容文件hello.js并没有合并到这个master分支里面。所以你看到的只有一个文件。接下来我们合并下分支sky8g.com到master分支上。
合并分支命令:git merge 分支名称
1.合并支分支内容到主(master)分支上。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Hello@sky8g.com MINGW64 (master) $ git merge sky8g.com Updating a6a497e..2d73c8f Fast-forward hello.js | 1 + magento-2.log | 1 + 2 files changed, 2 insertions(+) create mode 100644 hello.js Hello@sky8g.com MINGW64 (master) $ ll total 2 -rw-r--r-- 1 sky8g 197121 16 8月 10 14:16 hello.js -rw-r--r-- 1 sky8g 197121 64 8月 10 14:16 magento-2.log Hello@sky8g.com MINGW64 (master) $ |
通过上面我们在当前master主支上,是把分支sky8g.com的内容合并过来。合并后我们通过ll
命令查看就多了一个文件hello.js文件了。
2.合并主(master)分支内容到支分支上。
首先我们在主干上创建文件3.log,然后添加内容。
1 2 3 4 5 | Hello@sky8g.com MINGW64 (master) $ echo "sky8g.com" >> "3.log" Hello@sky8g.com MINGW64 (master) $ |
这里我们使用简单的方法echo命令把内容添加到3.log文件中,如果没有3.log文件,就会创建这个文件,如果有这个文件3.log就把内容追加进去。接下来我们操作下列命令。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Hello@sky8g.com MINGW64 (master) $ ll total 3 -rw-r--r-- 1 sky8g 197121 10 8月 10 16:13 3.log -rw-r--r-- 1 sky8g 197121 16 8月 10 14:16 hello.js -rw-r--r-- 1 sky8g 197121 64 8月 10 14:16 magento-2.log Hello@sky8g.com MINGW64 (master) $ git add . warning: LF will be replaced by CRLF in 3.log. The file will have its original line endings in your working directory Hello@sky8g.com MINGW64 (master) $ git commit -m "创建了第3个文件了" [master abb72ed] 创建了第3个文件了 1 file changed, 1 insertion(+) create mode 100644 3.log Hello@sky8g.com MINGW64 (master) $ |
在主干上我们创建了文件,并且添加了内容。我们在切换分支sky8g.com之前,必须执行git add 文件名或者.
添加到index库,并通过git commit -m "创建了第3个文件了"
提交到本地master仓库。这两个步骤必须执行不然在执行git checkout sky8g.com
分支切换的时候会报错误,冲突。
在执行上面两个步骤后我们在执行下面的操作
1 2 3 4 5 6 7 8 9 10 11 12 | Hello@sky8g.com MINGW64 (master) $ git checkout sky8g.com Switched to branch 'sky8g.com' Hello@sky8g.com MINGW64 (sky8g.com) $ ll total 2 -rw-r--r-- 1 sky8g 197121 16 8月 10 14:16 hello.js -rw-r--r-- 1 sky8g 197121 64 8月 10 14:16 magento-2.log Hello@sky8g.com MINGW64 (sky8g.com) $ |
通过上面可以看到没有显示3.log文件,这是因为我们还没有把主干(master)合并到分支sky8g.com上,所以看不到。接下来我们在执行合并主支内容到分支上来,如下操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | Hello@sky8g.com MINGW64 (sky8g.com) $ git merge master Updating 2d73c8f..abb72ed Fast-forward 3.log | 1 + 1 file changed, 1 insertion(+) create mode 100644 3.log Hello@sky8g.com MINGW64 (sky8g.com) $ ll total 3 -rw-r--r-- 1 sky8g 197121 11 8月 10 16:33 3.log -rw-r--r-- 1 sky8g 197121 16 8月 10 14:16 hello.js -rw-r--r-- 1 sky8g 197121 64 8月 10 14:16 magento-2.log Hello@sky8g.com MINGW64 (sky8g.com) $ git ls-tree HEAD 100644 blob 2b85ed366cc578f024026f119b7e536cf579419d 3.log 100644 blob 4ccb06e647dc3050852736d81bab1b23aacecdf7 hello.js 100644 blob cff4404748013fd7edaa7b6dfdaf8a51c88c8e00 magento-2.log Hello@sky8g.com MINGW64 (sky8g.com) $ |
合并之后我们可看到工作区和分支本地的库都用这个3.log文件了。是不是很神奇,确实是这样只要你把原来搞清楚学习GIT易如反掌,就这么简单。下面我们在创建一个分支名问hello分支。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Hello@sky8g.com MINGW64 (sky8g.com) $ git branch hello Hello@sky8g.com MINGW64 (sky8g.com) $ git branch hello master * sky8g.com Hello@sky8g.com MINGW64 (sky8g.com) $ git checkout hello Switched to branch 'hello' Hello@sky8g.com MINGW64 (hello) $ ll total 3 -rw-r--r-- 1 sky8g 197121 11 8月 10 17:45 3.log -rw-r--r-- 1 sky8g 197121 16 8月 10 14:16 hello.js -rw-r--r-- 1 sky8g 197121 64 8月 10 14:16 magento-2.log Hello@sky8g.com MINGW64 (hello) $ |
下面我们就执行删除分支的讲解。
GIT删除分支
1 | git branch -d 分支名字 |
例如: git branch -d hello
如果在删除分支出现错误:如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Hello@sky8g.com MINGW64 (hello) $ git branch -d hello error: Cannot delete branch 'hello' checked out at 'F:/git-project' Hello@sky8g.com MINGW64 (hello) $ git checkout sky8g.com Switched to branch 'sky8g.com' Hello@sky8g.com MINGW64 (sky8g.com) $ git branch -d hello Deleted branch hello (was abb72ed). Hello@sky8g.com MINGW64 (sky8g.com) $ |
我们可以通过上面可以看到我们在当前的分支删除本分支是会报错的,这是不允许的,必须在其他的分支执行git branch -d hello
,若果出现了错误如下
1 2 3 4 5 6 | Hello@sky8g.com MINGW64 (sky8g.com) $ git branch -d hello error: The branch 'hello' is not fully merged. If you are sure you want to delete it, run 'git branch -D hello'. Hello@sky8g.com MINGW64 (sky8g.com) $ |
请使用命令 git branch -D test2
进行强制删除。
好了,分支的创建,分支的合并和分支删除我们都学习了,那么我们如何进行版本控制呢,讲到这里还没有讲接触将版本控制呢,对于那些小伙伴们迫不及待的想学习了。下面我就讲述下GIT的伟大之处版本控制,如何进行版本控制。
GIT版本控制
通过上面的阅读已经阐述了什么是git的版本的控制 了。这里我就不在赘述了,直接命令操作学习。(接着上面的程序进行)
上面我们已经把主干(master)内容合并到了sky8g.com分支里面,接下来我们进行操作版本的控制。首先我们使用命令git log
或者git log --oneline
操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | Hello@sky8g.com MINGW64 (sky8g.com) $ git log commit abb72ed401e220aad72bc8343f11fbb8b1ce89ce (HEAD -> sky8g.com, master) Author: SKY8G <HelloG@sky8g.com> Date: Sat Aug 10 16:22:51 2019 +0800 创建了第3个文件了 commit 2d73c8f7dca76e9554a7de25bfdba5e39d836329 Author: SKY8G <HelloG@sky8g.com> Date: Sat Aug 10 14:00:27 2019 +0800 在分支仓库sky8g.com添加了hello.js文件 commit a6a497e2668f468aae42564e1fc7dfea16034249 Author: SKY8G <HelloG@sky8g.com> Date: Sat Aug 10 10:59:09 2019 +0800 这个是第一个提交了magento-2.log到当前master分支的仓库 Hello@sky8g.com MINGW64 (sky8g.com) $ git log --oneline abb72ed (HEAD -> sky8g.com, master) 创建了第3个文件了 2d73c8f 在分支仓库sky8g.com添加了hello.js文件 a6a497e 这个是第一个提交了magento-2.log到当前master分支的仓库 Hello@sky8g.com MINGW64 (sky8g.com) $ |
我们可以看到出现了这么多,其实了这两个命令的输出内容基本一致,git log
输出的信息比较详细,而git log --oneline
是简洁的主要信息。
下面我们讲解git log --oneline
这一部分,如果这一部分你懂了上面git log
的你也懂了。
abb72ed :表示的就是你每次提交到分支本地仓库的commit id,这个就是识别版本号的唯一ID,通过使用它就可以切换版本了,并且他是唯一。这里的这一串字符”abb72ed”是abb72ed401e220aad72bc8343f11fbb8b1ce89ce简写的,也就是前7位字符的合并。
(HEAD -> sky8g.com, master) :中间的这个是指当前的这个分支sky8g.com,并且是HEAD,既是指针指向这个commit id为abb72ed。如果没有中间的这部分如下列的那两行commit id分别为2d73c8f和a6a497e,这指的是历史的版本。
创建了第3个文件了: 最后的一部分是你之前提交的备注或者描述。
如果我们想回到 在分支仓库sky8g.com添加了hello.js文件
这个地方我们可以如下操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | Hello@sky8g.com MINGW64 (sky8g.com) $ git log --oneline abb72ed (HEAD -> sky8g.com, master) 创建了第3个文件了 2d73c8f 在分支仓库sky8g.com添加了hello.js文件 a6a497e 这个是第一个提交了magento-2.log到当前master分支的仓库 Hello@sky8g.com MINGW64 (sky8g.com) $ git reset --hard HEAD^ HEAD is now at 2d73c8f 在分支仓库sky8g.com添加了hello.js文件 Hello@sky8g.com MINGW64 (sky8g.com) $ ll total 2 -rw-r--r-- 1 jim 197121 16 8月 10 14:16 hello.js -rw-r--r-- 1 jim 197121 64 8月 10 14:16 magento-2.log Hello@sky8g.com MINGW64 (sky8g.com) $ git log --oneline 2d73c8f (HEAD -> sky8g.com) 在分支仓库sky8g.com添加了hello.js文件 a6a497e 这个是第一个提交了magento-2.log到当前master分支的仓库 Hello@sky8g.com MINGW64 (sky8g.com) $ |
通过上面的命令我们可以看到当前的工作区没有文件3.log,剩下了这两个文件了,什么情况?发生了什么?在通过git log --oneline
看看桌面少了一行呢?没错就是这样的这是因为我们使用了命令git reset --hard HEAD^
其中git reset
命令是回滚到以前的。既是退回到指定的地方。当我们执行了这个命令后指针HEAD就会回退了一步。HEAD^:表示的当前的版本的上一个版本,因为在你执行这个命令的时候当前的版本是HEAD所以在想回到当前版本的上一个版本既是 commit id 2d73c8f 这个版本。所以加了一个向上的箭头^
符号。如果加两个指当前的前两个版本。
倘若非常多的历史版本使用过多的向上的箭头^
符号,也显得麻烦。我给大家介绍一下一个万能的命令:
git reset --hard commit id
:既是如git reset --hard 2d73c8f
,这个表示只要输出id号就可以,执行执行这个命令之前,先执行下git log --oneline
查看一下想回到的版本的地方。
现在可以看到了吗?好,有人会说那如何回去当前的操作呢?别急当然有办法了。接下来我就跟大家讲解下如何回到最后一个版本。
接下来我们需要使用一个命令 git reflog
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | Hello@sky8g.com MINGW64 (sky8g.com) $ git reflog 2d73c8f (HEAD -> sky8g.com) HEAD@{0}: reset: moving to HEAD 2d73c8f (HEAD -> sky8g.com) HEAD@{1}: reset: moving to 2d73c8f 2d73c8f (HEAD -> sky8g.com) HEAD@{2}: reset: moving to HEAD^ abb72ed (master) HEAD@{3}: merge master: Fast-forward 2d73c8f (HEAD -> sky8g.com) HEAD@{4}: checkout: moving from master to sky8g.com abb72ed (master) HEAD@{5}: commit: 创建了第3个文件了 2d73c8f (HEAD -> sky8g.com) HEAD@{6}: checkout: moving from sky8g.com to master 2d73c8f (HEAD -> sky8g.com) HEAD@{7}: checkout: moving from master to sky8g.com 2d73c8f (HEAD -> sky8g.com) HEAD@{8}: merge sky8g.com: Fast-forward a6a497e HEAD@{9}: checkout: moving from sky8g.com to master 2d73c8f (HEAD -> sky8g.com) HEAD@{10}: checkout: moving from master to sky8g.com a6a497e HEAD@{11}: checkout: moving from sky8g.com to master 2d73c8f (HEAD -> sky8g.com) HEAD@{12}: commit: 在分支仓库sky8g.com添加了hello.js文件 a6a497e HEAD@{13}: checkout: moving from master to sky8g.com a6a497e HEAD@{14}: commit (initial): 这个是第一个提交了magento-2.log到当前master分支的仓库 Hello@sky8g.com MINGW64 (sky8g.com) $ git reset --hard abb72ed HEAD is now at abb72ed 创建了第3个文件了 Hello@sky8g.com MINGW64 (sky8g.com) $ git reflog abb72ed (HEAD -> sky8g.com, master) HEAD@{0}: reset: moving to abb72ed 2d73c8f HEAD@{1}: reset: moving to HEAD 2d73c8f HEAD@{2}: reset: moving to 2d73c8f 2d73c8f HEAD@{3}: reset: moving to HEAD^ abb72ed (HEAD -> sky8g.com, master) HEAD@{4}: merge master: Fast-forward 2d73c8f HEAD@{5}: checkout: moving from master to sky8g.com abb72ed (HEAD -> sky8g.com, master) HEAD@{6}: commit: 创建了第3个文件了 2d73c8f HEAD@{7}: checkout: moving from sky8g.com to master 2d73c8f HEAD@{8}: checkout: moving from master to sky8g.com 2d73c8f HEAD@{9}: merge sky8g.com: Fast-forward a6a497e HEAD@{10}: checkout: moving from sky8g.com to master 2d73c8f HEAD@{11}: checkout: moving from master to sky8g.com a6a497e HEAD@{12}: checkout: moving from sky8g.com to master 2d73c8f HEAD@{13}: commit: 在分支仓库sky8g.com添加了hello.js文件 a6a497e HEAD@{14}: checkout: moving from master to sky8g.com a6a497e HEAD@{15}: commit (initial): 这个是第一个提交了magento-2.log到当前master分支的仓库 Hello@sky8g.com MINGW64 (sky8g.com) $ |
通过上面我们可以看出输出了很多,如第一个git reflog
表示我们的历史记录,包括当前分支的所有的记录。我们可以看到最后一个版本既是 abb72ed (master) HEAD@{3}: merge master: Fast-forward
,其中里面是有一个master主,这个就是最后一个版本。我们还可以使用下面这个命令回到最后一版本。
1 | git reset --hard master |
第二阶段远程操作
嘿嘿嘿,在线催更,老哥要加油啊,这篇文章很不错,在这之前了解一下git再去玩一下learngitbranch这个游戏再来看就更好了