尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

[Git-2] Git基本操作

[Git-2] Git基本操作 一、创建本地仓库如果我们想管理本地文件的版本可以使用Git但是要先进行创建仓库。仓库其实就是进行版本控制的一个文件目录。假设我们创建了一个code目录我们想维护它的版本此时它只是一个文件夹还不算一个仓库我们得使用以下指令将其初始化为一个仓库gitinit执行结束后会提示“Initialized empty Git repository in /home/Jiasty/code/.git/”此时该目录中就创建好了一个.git隐藏文件夹标志着该文件夹已成为一个仓库。里面存储了很多仓库信息我们一定不要去乱改动里面的东西否则可能会破坏仓库的管理。二、配置本地仓库1、配置用户名和邮箱创建好仓库后紧接着就要去进行配置仓库信息一个是用户名name另一个是用户邮箱email这十分重要因为以后进行代码提交的时候Git需要记录提交者信息。配置仓库使用到的命令一般都是git configgitconfig user.name你的用户名gitconfig user.email你的邮箱如果想使用GitHub远程托管代码一般可以将Git邮箱配置为GitHub账号绑定的邮箱这样GitHub更容易将本地提交关联到你的账号。配置好后查看是否成功此命令会列举当前仓库的所有配置项gitconfig-lgitconfig --list。gitconfig user.name // 单独查看某个配置如果配置错误想删除可以用如下指令取消对应配置gitconfig--unsetuser.namegitconfig--unsetuser.email如果配置错了其实也可以直接重新运行配置命令。配置全局信息一台服务器其实是可以有多个仓库的如果它们的配置项都相同我们可以加上–global选项直接将配置信息配置成该用户全局生效这样所有的仓库name和email的信息都一样了。gitconfig--globaluser.name你的用户名// --global在当前机器的所有git仓库都生效gitconfig--global--unsetuser.name // 删除全局配置项gitconfig--global--list// 查看全局配置项2、配置作用域Git配置并不是只有一份不同作用域可以有不同的配置。常见的配置作用域有gitconfig--systemgitconfig--globalgitconfig--localsystem表示系统级配置。通常对当前计算机上的所有用户生效。一般情况下我们很少需要修改这一层。global表示当前用户级配置。配置会对当前用户的大多数Git仓库生效。local表示当前Git仓库的配置。它只影响当前项目。并且可以覆盖全局的配置。比如全局name为Tom但是局部可以配置为Jiasty。–local选项只能在选定Git仓库后进入使用。配置也有优先级一个仓库到底用哪种配置一般按local global system。三、工作区、暂存区和本地仓库上面我们知道了如何创建一个本地仓库以及相关信息的配置此时我们就能在已经创建好的仓库里面进行相关工作并记录修改等。我们创建好一些文件并放到我们创建的code文件夹中并没有实现管理因为.git文件才是我们的仓库也就是版本库。此时我们将相关文件放到与.git同级的目录下该目录就是工作区存放我们项目的一些文件。那我们将文件放到.git里算管理吗不算且不允许我们不允许手动修改.git文件。虽然.git文件在code文件夹下但它不属于工作区1、工作区域介绍Git有三个工作区域每一个都十分重要。工作区我们平时实际修改代码或文件的目录。暂存区用于保存下一次提交的修改集合。有时也叫索引英文叫stage或index。一般存放在 .git 目录下的index文件中。本地仓库英文名repository。工作目录中存在隐藏的 .git 目录。该目录本身不属于工作区而是Git用来保存版本信息的核心目录。Git会通过 .git 目录记录项目的提交历史、分支信息以及文件状态等内容从而跟踪文件的修改和删除并支持查看历史版本或恢复到之前的状态。很通俗的理解就是工作区是做修改的地方暂存区就像准备要提交材料的草稿箱而本地仓库就是正式提交的地方。比如你要给你的领导提交一份文档你觉得某个版本做得不错但是没有校验你只是把它进行一个保存不会真正的提交因为你也不确定到底还有问题没假设还有问题你也有修改的机会。提交之后也不是没有修改的机会但是已经形成了提交记录可被查阅就相当于是你正式提交后发现错误再修改再提交此时的处境肯定和前面不一样吧。2、工作区域关系我们知道要使用Git追踪文件完整流程要经过add和commit操作。文件的流动及各个工作区域的关系如下图所示暂存区暂存区也叫索引保存的是修改的git对象的索引。HEAD指针指向master分支master分支也是存的修改的git对象的索引。分支后面再详细讲解对象库Git的底层存储。每次修改都会生成新的git对象。也就是维护了版本实现了版本控制。至于git对象是什么可以简单理解为一种数据结构就是为了更好地维护文件所产生先简单了解。四、添加提交文件1、add提交到暂存区要想将工作区的修改交给Git进行追踪管理我们首先要使用git add指令将对应内容添加到暂存区。gitaddtest.txtgit add后直接跟对应的文件名目录也是文件。如果文件很多也可以一次带上多个文件名指定添加对应文件gitaddfile1 file2如果文件非常多并且全部更改你都想提交那么直接添加当前目录gitadd.2、commit提交到本地仓库当我们把修改的文件添加到暂存区后确认没问题就可以将其提交到本地仓库了。gitcommit-m填写具体细节比如添加了什么功能上面的命令执行后暂存区的所有文件都将提交。如果想指定部分文件提交可以带上对应文件名gitcommit file1 file2-m提交成功后终端会显示日志比如多少个文件改动增加了多少行内容减少了多少行内容。只有被添加到暂存区的文件才会被commit所提交create mode 100644是什么意思100644其实就是文件的权限此时代表普通文件。3、查看提交记录如果我们想查看当前仓库的提交历史信息可以用如下指令gitlog我嗯前面配置的name和email都在此可以看到。如果你觉得打印的信息太多太乱可以添加一些选项gitlog--prettyoneline这⼀⼤串同736a0e…7408a8088一样的数字是每次提交的commit id即版本号此id是⼀个SHA1计算出来的非常大的数字用十六进制表示。其实一个id就对应一个git对象。4、查看 .git 目录我们前面其实看过 .git 目录不过此时我们已经add并且commit了一些文件该目录其实会发生变化。是不是多了index、logs、objects以及refs下heads的master。index就是暂存区我们add的内容就添加到这里。HEAD指针就是指向当前的工作分支。查看HEAD指针的内容查看此文件的具体内容发现里面就是一个字符串和最新一次提交的commit id一样。一个id对应一个对象我们怎么找这个对象呢就在 .git/objects目录下。在该目录下commit id会分为两部分前两位会被命名为目录然后剩下的数字才是对应的git对象名字。这样存的目的是为了加快检索。查看对应git对象信息gitcat-file-p736a0eceb95c06992f51b60f3ce5c937408a8088 // -p就是--pretty的短选项parent就是此提交记录的上一次提交commit id。tree也是一个git对象它是什么呢我们打印看看tree对象记录的都是我们添加的文件如果继续打印就可以发现我们修改的内容证明都被Git追踪到了。五、修改文件Git跟踪管理的是修改而非文件。上述的创建删除修改文件内容都是修改。我们对某个文件内容修改无误后就可以用上面的指令重新提交至版本库。我们修改一下当前工作区的test.txt修改之后就与本地仓库的test.txt不一样了。使用如下命令我们可以知道距离上次提交有哪些文件被修改gitstatus当前工作区的test.txt被修改并且还有一个file3文件未被提交。上面的命令只能知道哪些文件被修改却不知道修改了什么。如下命令可以查看暂存区和工作区的文件差异gitdifftest.txt显示格式为Unix的diff格式可以了解一下—对应修改前对应修改后。 -0,0 1,2 是差异区块的定位信息号代表新增行-号代表删除行没有符号就是原本的上下文。查看版本库和工作区的文件差异gitdiffHEAD -- test.txt查看版本库和暂存区的文件差异gitdiff--cachedtest.txt六、删除文件添加、修改文件的操作我们都知道了现在我们想删除一个版本库中文件怎么删除呢直接在工作区删除吗前面说过删除也是一种修改操作所以在工作区的删除也是一种新的修改我们也要添加提交。使用如下指令删除工作区文件并将修改添加至暂存区gitrmtest.txt此命令其实就是删除加add两步操作你不使用它也可以完成删除操作。如果说你误删了文件该怎么办呢有什么办法回溯呢
返回列表