git基础教程

上传人:小** 文档编号:93481730 上传时间:2019-07-22 格式:PPT 页数:47 大小:917.88KB
返回 下载 相关 举报
git基础教程_第1页
第1页 / 共47页
git基础教程_第2页
第2页 / 共47页
git基础教程_第3页
第3页 / 共47页
git基础教程_第4页
第4页 / 共47页
git基础教程_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《git基础教程》由会员分享,可在线阅读,更多相关《git基础教程(47页珍藏版)》请在金锄头文库上搜索。

1、GIT基础教程,1、初识Git,Git是一款分布式版本控制系统,有别于CVS和SVN等集中式版本控制系统,Git可以让研发团队更加高效的协同工作,从而提高生产率。使用Git,开发人员的工作不会因为贫乏的遭遇提交冲突而中断,管理人员也无需为数据备份而担心。经过Linux这样庞大的项目考研之后,Git被证明可以胜任任何规模的团队。,2、Git初始化,Git的初始化 首先通过下面命令查看git版本 #git version 在开始使用Git之前,我们首先要用git config命令设置一下git的配置变量,主要有以下几步: (1)配置姓名,这个将在提交的时候用到 #git config -globa

2、l user.name “pang” #git config -global user.email (2)设置一些别名,以便使用更为简洁的子命令 #git config -global alias.ci commit (3)开启颜色显示 #git config -global color.ui true,创建版本库及第一次提交 首先建立一个新的工作目录,并在这个目录下建立版本库 #cd /path/to/my/workspace #mkdir demo #cd demo #git init Initialized empty Git repository in /path/to/demo/.

3、git 从上面初始化的输出信息来看,工作区创建了隐藏目录.git #ls aF ./ / .git/ 这个隐藏的.git目录就是Git版本库 下面向工作区添加文件 #echo “Hello.”welcome.txt 将这个文件添加到版本库 #git add welcome.txt 这里还没有完,需要提交一次才能进入版本库 #git commit m “initialized” 提交必须有提交说明,-m参数可以直接给出提交说明,为什么会有.git目录 在非工作区执行git命令会因为找不到.git目录而报错 #cd /path/to/my/workspace #git status 在工作区建立a

4、/b/c目录并进入 #mkdir p a/b/c #cd a/b/c 显示版本库目录 #git rev-parse -git-dir 显示工作区根目录 #git rev-parse -show-toplevel 显示工作区间根目录的相对目录 #git rev-parse -show-prefix 显示当前目录到工作区的深度 #git rev-parse -show-cdup,git config命令的参数区别 执行下面命令,将打开.git/config文件进行编辑 #git config -e 执行下面命令,将打开/home/git/.gitconfig文件进行编辑 #git config -

5、e -global 执行下面命令,将打开/etc/gitconfig系统级配置文件进行编辑 #git config -e -system 以上三个配置文件分别是Git版本库级别的配置文件、全局配置文件(用户主目录下)和系统级配置文件(/etc目录下)。其优先级别依次降低。,谁在提交? 在使用Git之前我们设置了全局变量user.name,如果不设置会出现什么后果呢 执行下面命令,删除全局变量中的user.name和user.email #git config -unset -global user.name #git config -unset -global user.email 这样一来,

6、关于用户的设置就被清空了,尝试一下提交 #git commit -allow-empty -m “who does commit?” 由于没有设置用户,会给出一段警告。查看下提交记录 #git log 可以看出Git对于用户姓名进行了大胆猜测,猜测用户为当前终 端登录用户。 为了保证提交者信息的准确性,需要对提交恢复用户设置 #git config -global user.name “pang” #git config -global user.email #git commit -amend -allow-empty -reset-author 其中-amend参数表示是修补提交,对上一

7、次提交进行修补,而不会产生新的提交。,小结,了解了Git如何初始化版本库及进行提交 熟悉Git配置变量的设置,3、Git暂存区,修改能直接提交吗? 首先更改welcome.txt文件,在文件后面追加一行。 #echo “Nice to meet you.”welcome.txt 比较本地与版本库中得差异 #git diff 可以看到文件修改了,那么提交 #git commit -m “Append a nice line.” 没有成功,查看提交日志,也没用新的记录 #git log #git status -s M welcom.txt 添加下修改文件 #git add welcome.txt

8、 #git diff,没有差别,难道是被提交了?在看一下当前状态: #git status -s M welcome.txt 两次状态输出有细微的差别,虽然都是M(modified)标示,但是位置不一样。git add执行前,M位于第二列,执行后位于第一列。 第一列表示版本库与暂存区的比较,第二列表示工作区与暂存区的区别。通过下面命令进一步体会: #echo “Bye bye.”welcome.txt #git status -s MM welcome.txt #git commit -m “which wersion checked in?” #git status -s M welcome

9、.txt 保存下我们的工作,后面的进度恢复会用到。 #git stash,理解Git暂存区,master,objects,add,checkout,commit,reset,HEAD,图中左侧是工作区,右侧是版本库。版本库包括暂存区,master分支,对象库等。 HEAD实际上是指向分支的一个游标。 图中objects标示的区域是Git的对象库。 当对工作区的修改的文件执行git add命令时,暂存区的目录会被更新,同时工作区的文件会被写入到对象库中。 当执行提交(git commit)时,master的目录树会根据暂存区做出相应的更新。 当执行git reset HEAD命令时,暂存区的目录

10、树会被master分支的目录树所替换。 当执行git checkout .命令时,会用暂存区的文件置换工作区的文件。(危险) 当执行git checkout HEAD .命令时,会用master分支的内容替换暂存区和工作区文件。(危险),目录浏览,查看HEAD目录树 #git ls-tree -l HEAD 浏览暂存区目录树,先清除工作区改动 #git clean -fd #git checkout . 对工作区做以下修改 #echo “Bye-bye.”welcome.txt #mikdir -p a/b/c #echo “Hello.”a/b/c/hello.txt #git add .

11、#echo “Bye-bye.”a/b/chello.txt #git status -s #find . -path ./.git -prune -o -type -printf “%-20pt%sn”,Git Diff 魔法,master,objects,Git diff,git diff -cached,HEAD,git diff HEAD,小结,了解Git的工作原理。 了解status的用法。 知道工作区,暂存区之间的区别。 学会diff不同的用法。,4、Git的对象,Git里见得最多的就是40位16进制的ID号了,产看最近一次提交 #git log -1 -pretty=raw 通过

12、提交日志,我们发现一个提交里含有3个ID: commit:本次提交的唯一标示 tree: 本次提交所对应的目录树 parent: 本次提交的父提交 研究git对象ID的一个重要武器就是git cat-file命令 #git cat-file -t ID 查看ID类型 #git cat-file -pID 查看ID内容 通过这个命令就可以对历史提交进行追踪了。,数据结构,对象库,Id e6956 Tree f58d Parent a0c6,commit,Id a0c6 Tree 190d Parent 9e8a,commit,Id f58d Blob fd3c |_welcome.txt,Tre

13、e,Id fd3c Hello.,Blob,对象库,ID为什么不用顺序数字,Git的提交为什么不用顺序数字而采用40位16进制,这是因为Git是一个分布式的版本控制系统。如果采用顺序递增的编号,只能保证本地版本库的唯一性,在分发的时候难免会造成冲突。所以采用40位ID可以保证编号的全球唯一。 40位的ID如何访问? 对于人来说,要记住40位的16进制数是很困难的,Git提供了很多方法可以方便的访问这些ID。 1、不必写全ID,只采用开头部分(一般4位以上),只有不与现有其他ID冲突即可。 2、使用HEAD代表最新提交,则 HEAD表示HEAD的父提交 HEAD5表示HEAD,小结,了解Git对

14、象的概念 通过ID追踪历史提交,5、Git重置,我们知道,master相当于一个分支游标,每次都指向最新的提交。但是既然是游标,就应该既可以向上“游动”,也可以向下“游动”。 下面来体会下master游标是怎么变化的 #cat .git/refs/heads/master /查看master指向 #touch new-commit.txt #git add new-commit.txt #git commit -m ”does master change?” #cat .git/refs/heads/master 下面,我们重置下master游标 #git reset -hard HEAD #

15、cat .git/refs/heads/master,可以看到,不仅刚才提交的文件没了,连提交日志中的记录也不见了。使用重置命令很危险,会彻底丢掉历史。那么,利用浏览提交历史的方法找到丢弃的ID,在使用重置恢复历史吗?不可能!因为重置让提交历史也改变了。 #git log 发现提交日志中被丢弃的提交已经不存在了。所以我们无法通过丢弃的ID来进行恢复。 那么,如果不小心进行了错误的重置,应该如何去挽救呢?,利用reflog挽救错误重置,如果没有记下被丢弃的提交ID,想要重置回原来的提交很麻烦。幸好Git提供了挽救机制。日志目录下有专门记录分支变更的文件。 查看最近5次变更记录。 #tail -5

16、 .git/logs/refs/heads/master #git reflog show master | head -5 根据reflog显示,master2是最后一次提交 #git reset master2 #git log 可以发现提交历史也都恢复了。,深入了解git reset命令,#git reset -q - #git reset -soft|-hard -q 上面两个用法,是可选项,省略则表示是HEAD指向的提交。 第一种用法包含路径,不会重置引用,也不会改变工作区,相当于取消了之前执行的 git add命令。 第二种则会重置引用,根据不同的选项可以对暂存区和工作区进行重置。 -hard:替换引用;置换暂存区;置换工作区。 -soft: 替换引用。,小结,熟悉reset重置的用法。 学会利用reflog恢复错误重置。,6、Git检出,重置命令可以更改master的游标指向

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号