赞
踩
以前笔者对代码版本管理都是打包成一个压缩包文件。当版本数较多时,管理起来实在是费心费力。最近接触到代码版本管理器工具Git,了解学习后,用起来实在是太香了,写一篇文章捋一下Git的基本操作代码和流程,给自己以后的代码管理提供一个参考。
Git 是一个开源的分布式版本控制系统,所谓的分布式版本控制系统是相对于其他的一些集中式版本管理系统而言的,如CVS、SVN等,这些集中式版本管理系统每次都需要从中央服务器下载最近的版本,在该版本上进行一些工作后,再将更新后的版本数据上传到中央服务器中。并且中央服务器崩溃以后,当然我们的版本数据也都gg了,而对Git来说,不需要把版本进行上传,本地就保存有完整的版本信息历史,用户之间也可以相互传输版本信息数据,因此可靠性远优于集中式版本控制系统。
本文以一个简单的文本文档工程为例,描述其中各个阶段执行操作的指令,主要包含了创建版本库、添加文件、版本回滚、版本修改、文件删除及撤回等操作指令。
在Git官网下载完成Git后,在桌面新建一个工程文件夹,我这里命名为 test ,打开文件夹,右击选择Git Bash Here
,在打开的界面键入git config --global user.name "ID"
,其中ID为自己设置的用户名称,回车后键入git config --global user.email " xxx@xxx.com"
,其中邮箱地址不需要真实存在,再次回车。完成后界面如下:
在当前的工程文件夹下面新建一个版本库并添加若干文件到版本库中。
接下来在该文件夹下创建版本库,继续在该操作界面,键入git init
回车后可以在该文件夹下看到新建了一个.git 的文件夹,专门用于管理工程文件夹(即工作区)版本,.git 文件夹中的内容我们不直接进行操作,防止出现未知错误。
首先在我们的工程文件夹下方新建一个 txt 文件,输入一些内容:“This is the first txt to test Git.” 保存后,同样在该文件夹下右击选择Git Bash Here
打开命令行窗口。Git的版本文件上传时共两个步骤,第一步是将数据放入到暂存区,第二步是将暂存区内部的版本数据提交到版本库,类似于手枪的子弹上膛和发射。
我们先将刚刚的txt文件放入暂存区,命令行键入git add file
,其中的file
是我们添加的文件名称;再将其上传到版本库,命令行键入git commit -m"xxxx"
其中xxxx
部分为我们对本次上传的版本数据的备注,为了防止各个版本之间的混淆,是十分必要的。完成以上操作后界面如下:
至此,我们已经将第一个版本的test.txt文件完成并上传到了版本库中。值得注意的是,我们每次可以将多个文件放入到暂存区:键入git add file1 file2 file3
,将全部非空文件放入暂存区:键入git add .
,再将以上暂存区文件一起上传到库,同样键入git commit -m"xxxx"
即可。
观察我们上传后返回的一些内容,可以看出我们commit以后都会有一个专属的代码编号如本次的0a73015
(此处为标签前7位),这一点很重要,后面很有用。
在上述commit以后,我们查看一下版本库的状态,在命令行键入git status
界面如下:
此时因为我们的工作窗口并做出与上次上传版本不同的改动,返回的内容显示我们没有内容需要上传,并且工作窗口很干净。
接下来我们在原txt文件中增加一部分内容:“This is the change”,并且在工作窗口新建一个test1.txt文本,内容为:“This is the second txt to test Git.”完成后再次查看版本库状态:键入git status
并回车后,界面如下:
从中我们可以观察到第一个txt文件test.txt修改后没有提交,第二个test1.txt修改后因为没有提交过所以没有进行跟踪。
那么我们如何知道每次在工作区进行了哪些内容的修改呢?只需要键入git diff file
,其中file
为我们要检查内容修改的文件名,
本次我们检查第一个txt文件test.txt的变化:界面如下:
可以看出,界面中显示出了新的txt文件与原文件的变化,需要注意尚未commit到库中的文件是无法检测其在工作区中发生的语句变化的(保存在暂存区也是可以检测工作区与暂存区的语句变化的)。
在编程代码迭代过程中,有时候进行一些尝试失败后,可能需要回滚到以前的代码版本,甚至有时候回滚以后发现代码不对,还需要向前方回滚,进入到“未来的”代码版本,这里介绍代码向后回滚以及向前回滚的指令。
首先,将以上的两次代码进行commit到库中,备注“ test.txt and test1.txt have done ”。进行程序发生错误需要回滚之前,我们需要知道我们当前已经提交了哪些版本到库中。键入git log
观察历史上传版本和备注,命令行窗口如下:
从窗口中可以看到我们一共commit到库中两次,分别为“first test has done”和“ test.txt and test1.txt have done”,上方包含了每次提交对应的编码,因此当前状态为“ test.txt and test1.txt have done”状态,如果我们想要回滚到“first test has done”状态,只需键入git reset --hard HEAD^
,其中HEAD
表示当前状态,^
表示上一个状态,^^
表示上2个状态,依此类推。当需要回滚到指定状态下时,也可以使用该次commit对应的编码。如“first test has done”对应的commit编码为0a7301540ef6b8571caefb89f577a41b9e5d28bb
,即键入git reset --hard 0a73015
(编码无需全部打出,只需要确保前几位是该数字的commit编码即可)。我们采用第二种方法,得到的命令行窗口如下:
这样的话,整个工作区文件就会回滚到我们第一次提交的状态,检查工作区后发现txt确实返回到我们第一次保存的状态了。
如果我们发现自己回滚错误了,还需要向前回滚,回到相对于现在的状态是“未来”状态的版本又该怎么办呢?
如果当前的命令行窗口没有关闭,当然可以再次通过回滚到第二次commit对应的编码,“ test.txt and test1.txt have done”对应的编码为58963147266fa0af92f7d0206e793f17b4d57296
,键入git reset --hard 5896314
即可向前回滚到“未来”版本。
如果我们已经关闭了命令行窗口呢?我们可以选择键入git reflog
,界面显示如下:
从图中看出,历史指令自下而上分别是:HEAD在第一次提交中指向第一次commit的编号,在第二次提交后又跳转到第二次commit的编号,第三次因为之前的回滚命令回到了第一次commit的编号。这里的HEAD是一个指向当前状态的指针。从以上历史指令可以清晰地看出我们第二次commit后的编号,那就向前回滚,键入git reset --hard 5896314
回到“未来”版本,再次查看历史指令,界面如下:
可以看到经回滚后,HEAD再次指向了第二次commit的编号,查看工作区,文件版本也回到了第二个“ test.txt and test1.txt have done”版本。
本小节主要包括在工作区以及版本库删除文件。
直接在工作区删除文件,或者采用键入rm xxx
(xxx为文件名)的方式删除某个文件并将该版本保存在暂存区,接下来只需键入git commit -m"xxxx"
,即可将删除文件的版本上传到版本库中。操作后界面如下:
test1.txt文件已经在工作区中删除,观察当前库状态可以看出,工作区相对于版本库删除了文件test1.txt,如果删除错误了呢?我们可以键入git checkout -- xxx
(xxx为被删除的文件名称),将之前删除的文件重新添加到工作区,观察库状态界面如下:
之前在工作区被删除的文件已经重新由版本库添加到了工作区(如果该文件只保存在暂存区也可以用该方法恢复到工作区)。
上述的rm file
(file为文件名)能够删除当前工作区内的文件,如果要删除版本库内部的文件,需要键入git rm file
,该语句的功能相当于删除文件并提交到暂存区,当再次commit以后版本库中的文件就会删除,如下方命令行窗口。
如果我们需要撤销版本库中对文件的删除,可以通过版本回滚的方式回到上次commit的状态,即可恢复版本库中的文件。至此关于Git中的一些基本操作就告一段落了。
Git 同样可以帮助我们更好的将Github上的开源项目下载到本地便于学习,只需要在我们所创建的文件夹下右击选择Git Bash Here
,打开命令行窗口后键入git clone xxxxx
(xxxxx为Github网站下所对应的项目code地址),回车后即可自动将工程文件下载到当前的文件夹中。
检查工作区,工程文件已经成功添加到指定的文件夹下了,我们就能进行愉快地学习啦!
对本文涉及的指令操作进行一个整理如下:
操作指令 | 实现效果 | 备注 |
---|---|---|
git config --global user.name"xxx" | 配置用户名 | xxx为用户名 |
git config --global user.email"xxx" | 配置用户邮箱 | xxx为邮箱 |
git init | 创建版本库 | |
git add xxx | 上传文件到暂存区 | xxx为文件名 |
git add . | 所有非空文件上传暂存区 | . 代表所有非空文件 |
git commit -m"xxx" | 所有暂存区数据上传版本库 | xxx为上传的版本备注 |
git status | 查看当前状态 | 包含工作区、暂存区与版本库之间的变化 |
git diff xxx | 查看文件修改内容 | xxx为文件名 |
git log | 查看上传版本历史 | |
git reset --hard HEAD^ | 回滚到前一版本 | ^的数量决定回滚次数 |
git reset --hard xxx | 回滚到指定版本 | xxx为某一次commit的版本编号 |
git reflog | 查看操作历史 | |
rm xxx | 删除工作区文件 | xxx为文件名 |
git rm xxx | 删除工作区文件并上传暂存库 | xxx为文件名 |
git checkout – xxx | 用暂存区版本数据覆盖工作区 | xxx为文件名 |
git clone xxx | 下载github工程文件 | xxx为项目code地址 |
以上即为笔者使用Git进行版本管理的基本操作指令,希望能够对大家有所帮助。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。