分布式版本控制系统Git|2关于Git的一些基本内容,简要介绍和一些命令的使用在后面几篇文章中给出。分布式版本控制系统Git今天的文章将延续上一篇的内容,继续讲解Git基础知识的内容。Git基础知识(续)记录对存储库的更新当您拥有实际项目的Git存储库时,从存储库中提取所有文件的副本。大体流程是修改文件,完成目标,提交更新到仓库。在这个过程中,工作目录下的文件只有两种状态:tracked或者untracked。跟踪文件是指已包含在版本控制中的文件。它们被记录在最后一个快照中。在工作一段时间后,它们的状态可能是未修改的、修改过的或放入暂存区的。另外,工作目录中除被跟踪文件外的其他文件均为未跟踪文件,这些文件既不存在于上次快照中,也未放入暂存区。查看当前文件的状态使用gitstatus命令查看文件的状态。当克隆仓库没有被修改时,使用这个命令会看到如下结果:$gitstatusOnbranchmasternothingtocommit,workingdirectoryclean这里表示工作目录是干净的。也就是说,自上次提交以来,没有任何被跟踪的文件被修改。此信息还表明没有新的未跟踪文件,否则将显示在此处。Onbranchmaster这个信息表示当前分支是master,也就是默认分支。至于Git分支,后面的章节会详细讲到。尝试创建一个新文件readme.txt,使用gitstatus命令查看状态:$echo'Somethingyouneedtoknowaboutgit'>readme.txt$gitstatusOnbranchmasterUntrackedfiles:(use"gitadd..."includeinwhatwillbecommitted)readme.txtUntrackedfiles表示readme.txt是一个未跟踪的文件,Git不会自动将其包含在跟踪范围内,因此需要对新文件进行跟踪管理。跟踪新文件上一篇文章讲了gitadd命令,它是用来跟踪新文件的。现在尝试跟踪readme.txt文件:$gitaddreadme.txt此时使用gitstatus命令查看readme.txt文件的状态此时已经是临时状态:$gitstatusOnbranchmasterChangestobecommitt:(use"gitrestore--staged..."tounstage)newfile:readme.txt这部分内容在分布式版本控制系统Git中也有简单介绍,这里用到作为一个熟悉的命令。Changestobecommitted:,这一行下面的一行表示已经暂存。如果此时提交,这个文件在gitadd时的版本会留在历史中。临时存储修改过的文件当被跟踪的文件被修改时,使用gitstatus命令查看状态:$gitstatusOnbranchmasterChangestobecommitted:(use"gitrestore--staged..."tounstage)newfile:readme.txtChangesnotstagedforcommit:(use"gitadd..."toupdatewhatwillbecommitted)(use"gitrestore..."todiscoverchangesinworkingdirectory)修改:about_git.txt这个信息中可以看到about_git.txt文件发生了变化,但是还没有放入暂存区。这里也建议大家可以使用gitadd命令来暂存这个更新。gitadd可以跟踪新文件,也可以将跟踪的文件放入暂存区。这个命令可以理解为“将内容添加到下一次提交”。使用gitadd将about_git.txt文件放入暂存区,然后使用gitstatus查看状态:$gitaddabout_git.txt$gitstatusOnbranchmasterChangestobecommited:(use"gitrestore--staged...”tounstage)modified:about_git.txtnewfile:readme.txt此时新文件和修改后的tracking文件已经暂存,下次提交时会一起更新到仓库制成。如果此时修改了about_git.txt文件的内容,编辑保存即可。当你想提交两个文件时,先使用gitstatus检查状态:$gitstatusOnbranchmasterChangestobecommitted:(use"gitrestore--staged..."tounstage)modified:about_git.txtnewfile:readme.txtChangesnotstagedforcommit:(use"gitadd..."toupdatewhatwillbecommitted)(use"gitrestore..."todiskchangesinworkingdirectory)修改:about_git.txt在这里你会发现about_git.txt文件同时出现在暂存区和非暂存区。出现此结果的原因是Git仅在运行gitadd命令时暂存版本。如果此时提交,about_git.txt的版本也将是执行gitadd命令时的版本,而不是当前工作区的版本。所以当你运行gitadd并修改文件时,你需要重新使用gitadd来临时保存最新版本:file>..."tounstage)modified:about_git.txtnewfile:readme.txt查看临时和未暂存的修改。gitstatus命令的输出是指工作区的状态。至于具体修改Somewhere,可以使用gitdiff。gitdiff不同于gitstatus以列出文件名的形式输出结果,而是以文件补丁的格式显示哪些行发生了变化。如果再次修改readme.txt暂存,修改about_git.txt文件不暂存,使用gitstatus命令查看效果:$gitstatusOnbranchmasterChangestobecommitted:(use"gitrestore--staged...”取消暂存)修改:readme.txtChangesnotstagedforcommit:(使用“gitadd...”更新将提交的内容)(使用“gitrestore...”到discardchangesinworkingdirectory)modified:about_git.txt要查看非临时部分更新了什么,直接使用不带参数的gitdiff:$gitdiff--gita/about_git.txtb/about_git.txtindex8596ae8..39f1422100644---a/about_git.txt+++b/about_git.txt@@-4,4+4,4@@ChangesomethingAddsomething-Somethingdifferenthere+Somethingchanged这条命令比较当前文件和临时存储在工作区区域快照之间的差异。也就是修改后暂时没有保存的改动。如果需要查看已经暂存提交的内容变更,使用gitdiff--staged命令。此命令比较暂存文件和最后提交的文件之间的差异。$gitdiff--stageddiff--gita/readme.txtb/readme.txtindex35b128b..a68a8b2100644---a/readme.txt+++b/readme.txt@@-1+1,3@@添加内容here++Changesomethinghere请注意,gitdiff本身只显示未暂存的更改,而不是自上次提交以来所做的所有更改。所以有时候一次性把所有更新的文件临时存起来后,用gitdiff会发现什么也没有,就是这个原因。再试一下上面提到的一种情况,暂存后编辑about_git.txt的情况。先用gitstatus查看结果:$gitaddabout_git.txt$echo"#testline">>about_git.txt$gitstatusOnbranchmasterChangestobecommitted:(use"gitrestore--staged...“取消暂存)修改:about_git.txtChangesnotstagedforcommit:(使用“gitadd...”更新将提交的内容)(使用“gitrestore...”丢弃工作中的更改directory)modified:about_git.txt然后用gitdiff查看临时修改:$gitdiffdiff--gita/about_git.txtb/about_git.txtindex39f1422..5962c89100644---a/about_git.txt+++b/about_git.txt@@-5,3+5,4@@ChangesomethingAddsomethingSomethingchangedhere+#testline然后使用gitdiff--staged查看临时修改的部分:$gitdiff--stageddiff--git一个/about_git。txtb/about_git.txtindex8596ae8..39f1422100644---a/about_git.txt+++b/about_git.txt@@-4,4+4,4@@ChangesomethingAddsomething-Somethingdifferenthere+Somethingchangedhere提交update这部分在分布式版本控制系统Git中也有介绍。可以使用gitcommit打开编辑器,输入更新信息提交更新。你也可以使用gitcommit-m在message添加更新信息来提交更新。下面的例子:$gitcommit-m"Fixissue007"[masterdd6c67d]Fixissue0072个文件改变,4个插入(+),1个删除(-)这里需要注意的是,提交的时候,记录放在的暂存区快照中。其他没有暂存的文件仍保持修改状态,这部分内容可以在下次提交时纳入版本管理。其实每次提交都是项目的一个快照,以后可以回到这个状态,或者对比一下。总结使用gitstatus查看文件状态;使用gitadd跟踪新文件并临时存储修改过的文件(即跟踪文件修改);使用不带参数的gitdiff查看未暂存文件的修改;使用带参数的gitdiff--staged可以查看staged文件的修改部分;使用gitcommit-m提交更新。以上就是本文的主要内容,未完待续,请关注微信公众号《书所集录》