本文内容要点:
本地版本库
创建版本库
理解工作区、暂存区
添加文件到版本库
提交版本
更新版本
撤销文件修改
删除文件
忽略文件
文件版本历史与文件比对
版本回退
临时存储
1.本地版本库
本地:可以理解为自己正在使用的电脑;
版本库(repository):就是文件仓库,在开发中就是我们的代码根目录就设定为文件仓库,然后里面的文件就可以通过Git来管理,Git对这个仓库的各个文件的修改、添加、删除等的历史记录都会记录起来方便进行任何时候的历史查看、文件恢复还原等。一般地一个项目就用一个版本仓库来管理
2.创建版本库
在项目根目录右键,出现Git相关的菜单,选择Git Create repository here...
,确定后,目录下面就会多了一个.git的文件夹(如果文件夹设置为隐藏可以见的话),表示该代码仓库在本机建立成功了,该文件夹就是保存Git相关的版本历史信息的,注意不要删除也不要改动!(删除了该文件夹版本库的历史就都没有了哦)
3.理解工作区、暂存区
工作区:就是我们直接编写代码的地方,理解就是代码仓库的根目录下面我们在各个编写代码的文件和目录
暂存区:后面我们会讲到版本的Commit,也就是把代码提交形成一个版本记录,那么在工作区和形成版本中间,有一个中间状态,叫做暂存区,是指把文件暂时存在这个区域,通过commit操作后,代码会提交到版本库默认分支,形成版本记录。
4.添加文件到版本库
我们在目录下面建立我们所需的各个代码文件,操作如下:创建一个readme.md的文件,然后打开文件,在里面打字:初始版本库成功
代码编辑完毕后,我们在根目录下单击右键>进入Git菜单:TortoiseGit > Add,把文件选中,这个时候就相当于把我们需要版本库管理的文件添加到了暂存区
这一步其实也可以和下一步:提交版本(commit)合并一起处理的
5.提交版本(commit)
代码编辑完毕后,提交到暂存区后,需要形成一个版本记录,那么我们需要执行版本提交。
执行操作如下:在根目录中单击右键 > Git Commit >master(master是我们这个版本库的默认的分支名,分支在后续的文章我们会介绍到)
执行该命令后,会弹出如下界面,刚才上一步添加文件到版本库,如果没有添加的话,这个时候,里面会列出这些文件,勾选这个文件,就会把这个文件添加到版本库(也就是上面一步可以和这一步一起做),执行提交后就会形成版本记录了
有一个地方需要注意的是:每次commit都要填写版本的说明信息等,否则提交不了哦:
提交出现如下状态,表示本地版本库提交成功(并且一般情况下这个时候根目录下面已经提交成功的文件会出现绿色勾):
6.更新版本
我们的代码项目中每个文件代码都是经常更新的,那么我们接下来编辑更新一下我们的readme.md文件,编辑保存后,该文件在目录下面会有一个红色的叹号,表示更改过这个文件,并且还没有提交到版本库:
我们在根目录下面同样执行 单击右键 > Git Commit ->master(这一步的操作和上一步是一样,只是默认已经在版本库管理的文件会自动勾选中),同样添加提交信息,点击commit后,即可更新提交版本成功。
7.撤销文件修改
有些代码文件,我们修改了之后,发现改得乱七八糟了,这个时候我想重新再来修改过,我可以选择一个一个文件改回来原来样子,但是这样明显很费劲啊,幸好Git提供了一个很好的方案:Revert(恢复),也就是把工作区设置为版本库最后的版本状态。如下操作:我们先修改一下我们的这个readme.md文件,保存后,我们在根目录上单击右键 > TortoiseGit > Revert,勾选需要恢复的文件,OK之后就恢复完成了,文件的修改就撤销完毕。
8.删除文件
有些代码文件,我们可能需要把它删除掉,其实删除你可以直接删除掉,或者是使用Git的delete操作都是可以的(执行操作后,需要记得commit哦),删除文件也相当于一个更新操作。
选中文件单击右键 > TortoiseGit > Delete或者Delete(keep local),区别是前者把文件从代码库删除掉,并把文件从该目录删除。执行完成后,需要commit,后面就不会再提交该文件的版本库了。
需要注意的是:执行Delete(keep local)后,文件还存在本地,提交的时候会默认又把该文件勾选提交哦,这个时候可以不勾选提交,或者是参考下一步忽略文件的操作。
9.忽略文件
有些文件我们可能只是临时放在目录中测试的,不想提交到版本库里面去,那么我们可以在提交的时候不勾选提交即可,但是如果文件一多,那么这个看起来就很吃力,所以,我们可以使用Git的忽略文件提交操作。
如上一步,readme.md这个文件删除后,我不想提交到版本库里面去了,那么我执行如下操作:选中文件单击右键 > TortoiseGit > Add to ignore list > readme.md,点击OK后,会在根目录生成.gitignore文件,这个文件记录了Git系统提交版本的时候需要忽略的文件规则,注意:下面一行的*.md
的意思,忽略掉所有的.md结尾的文件的意思。
忽略文件后,勾选.gitignore文件再次commit,文件忽略操作即完成:
10.文件版本历史与文件比对
我们经常提交文件版本,形成了版本库,那么我们如何查看我们提交的版本历史呢?
需要查看哪个文件或者是目录的版本历史,在该目录或者文件下右键,然后执行Show log操作(需要目录或者文件在版本库中跟踪管理,没有忽略提交的哦):
点击每一个版本的记录行,就可以看到下面的版本说明和对应操作的文件
有些时候,我们写着写着代码的时候,发现我不小心把已经写好的提交到版本库的某一段代码删除掉了,这个时候我记得版本库里面有,但是我现在写的代码还没有写好,不想撤销该版本的修改,那么我们可以查看这个文件的版本历史,在最后的历史版本中找到该段代码复制过来哦。
具体操作如下:
首先我建立了一个文件index.md
,并且提交了几次修改版本,最终版本历史记录和文件状态如下:
接着我修改并保存了该index.md为如下图,还没有提交到版本库,这个时候我发现第一行被我删除了,我想找回来:
我们可以通过当前工作区文件和对应的版本库的文件历史进行对比找回来:
在该文件上单击右键>TortoiseGit > Diff(差异),你就可以看到工作区和版本库的文件对比差异,差异的部分会用高亮颜色标识出来的哦。
11.版本回退
一般版本恢复
有些时候,我们发现代码比较槽糕,想把某个文件或者是目录的代码回退到某一天的某个版本,那么我们应该怎么处理呢?
在某个目录或者文件下面右键,查看历史记录,也就是上一步的版本历史查看,如下图,我要恢复index.md的版本到修改index这个版本,然后找到想要恢复的版本上面进行如下操作:单击右键>执行Reset "master" to this...(也就是把版本库master分支设定到该版本):
然后版本库的默认master分支和工作区中的文件都会回退到这个版本,需要特别注意的是:这个版本之后的版本信息在Show log中看不到了哦。
如果这个时候你发现,我回退错了,你就慌了,Show log里面没有了,想恢复到原来的最新版本咋整?
幸好,Git还有一个reflog功能,也就是你所有执行的Git操作,这里面都会看到,具体操作:在根目录空白处单击右键 > TortoiseGit > Show Reflog :
选择一个你想回退的版本,单击右键 > Reset "master" to this...,和上面的是类似的操作,确认后,代码版本又会回到最新版本啦。
强行回退远程仓库版本
现实总是不让我们省心,有些时候,我们发现我们写的代码写了一段时间没有写好,我想回到前几天的某个版本V1重新开始,然后,我就按照上面的版本回退把本地的版本库恢复到前几天的V1版本了。
接着我想把回退到前几天的这个V1版本推送到远程仓库的时候发现,推送不上去,提示远程仓库比本地仓库新的意思,也就是远程代码是今天推送的,但是本地仓库的代码我恢复到前几天的V1版本了,本地代码落后了,Git就会让你先pull下来,同步远程仓库代码,但是这样的话,你会发现本地仓库又变成了今天的代码了,而不是前几天的V1代码,然后我们又把本地恢复为V1……如此重复……尴尬了!!!
解决这个问题,我们只有强行让远程仓库版本回退了,如下操作:
首先,本地先按上面说的一般版本恢复办法恢复到你想要的版本,因为是回退,这个时候有可能本地的文件会存在最新的文件代码,那么请不要commit提交,因为你要恢复到老的版本,那么新版本的代码肯定不要了,抛弃本地的所有未提交的东西,根目录右键执行:TortoiseGit > Revert,然后勾选所有需要抛弃的文件,OK;
然后,根目录空白处执行右键:Git Sync...,在弹出的对话框中勾选Force,然后Push推送到远程,这个的意思就是强制同步本地版本库到远程仓库,强行把远程仓库的版本库回退
然后你到远程仓库查看版本信息,就会发现已经回退啦。。。。
临时存储
某日,我正在开发一个功能,代码写到一半了,产品经理过来跟我说,哥,线上有个bug需要紧急修复一下……我肯定不敢大意呀,只能停下手中的工作,先去“救火”不,但是当前开发的功能没有开发完,提交推送的话也可能影响到其他同事更新代码的时候把我未完成的代码更新过去了,到时候他们那里没有办法执行代码了,那就不得了啦……所以,这个时候,我想临时先存储一下目前工作区的各个文件的状态,等到我修复完bug之后再回来继续做后续的开发。那么我们就使用到了Git的stash功能,具体操作如下:
右键TortoiseGit > Stash Save,然后输入说明文字,保存即可
恢复到之前的开发状态:右键TortoiseGit > Stash List,然后在弹出的对话框中选择需要恢复的状态,右键,执行Stash Apply即可。
最后如果不需要这个临时状态了,那么就可以在状态列表里面执行右键,然后Delete Ref,确认即可
总结
最常用的操作就是在工作区目录下面单击右键,选择TortoiseGit相关的操作和Commit操作:
从上面的操作,你可以体会到Git的功能非常强大,也对我们的开发有着非常好的帮助,以上都是我们在windows下面最常用的Git操作技能,更多技能大家可以再自己独立研究研究。