一.git 的配置信息
获取并设置存储库或全局选项 git config
config 配置三个级别:
system级别,global(用户级别),和local(当前仓库)
local>global>system
想了解 Git 的各式工具该怎么用,可以阅读它们的使用帮助,方法有三:
git XXX --help / git help XXX / man git-XXX
例如:git config --help
git配置的增删改查
增:git config --global user.name XXX
git config --global --add user.name XXX
改:git config --global user.mane XXX2
删:git config --global --unset user.name
查:git config --get user.name
git config user.name
检查已有的配置信息git config --global --list
为git子命令配置别名:git config --global alias.co cheskout
二.git 的基本工作流程
git使用40个16进制字符的HASH来唯一标识对象
对象分为4种
blob:用来存储文件内容, 或者说表示一个文件。例如:文本文件,二进制文件,链接文件
tree:目录
commit:历史提交
tag:标签,commit的别名。指向固定的历史提交
关系:tag->commit->tree(可包含其他的tree对象)->blob
git只关心文件的内容,若两份文件的内容相同,则会指向同一个blob对象,文件名或者其他信息会存储在tree对象里
创建仓库
git仓库分两种:
1.一种为裸仓库,不带工作区,通常用于服务器中和其他用户方便协作(没有.git的目录)
$ git init --bare XXX
2.一种是本地仓库,会自动创建.git目录
$ git init 仓库名字
已经有的环境把他纳入git的管理 进入这个文件夹,在这里执行git init命令
获得git仓库 需要一个远程仓库的地址
$ git clone <版本库的网址>
该命令会在本地主机生成一个目录,与远程主机的版本库同名。如果要指定不同的目录名,可以将目录名作为git clone命令的第二个参数。
$ git clone <版本库的网址> <本地目录名>
git仓库有3个工作区域
工作区--日常编辑代码的地方,维护着树形结构
暂存区--需要提交的工作状态,维护着虚拟的树型结构,代表了下一次提交内容的整体
历史仓库--commit指向的树形结构
添加操作
$ git add path 将修改添加到暂存区,也就是将要提交的文件的信息添加到索引库中。path可以是文件也可以是目录。
$ git add . 或者 $ git add -A 将所有修改添加到暂存区
$ git states 查看工作区和暂存区的区别
删除操作
$ git rm -f a 同时把工作区和暂存区里面的a引用删掉
$ git rm --cached a 只删除暂存区里的文件
未被Git跟踪的状态为unstage状态(存放在暂存区的文件)
已经被Git跟踪的状态为stage状态,因此包括staging状态状态和staged状态
untrack files是指尚未被git所管理的文件;
(新建的test1.txt文档)
changed but not updated是指文件被git管理,并且发生了改变,但改动还没被git管理;
这两种状态,都可以看成是改动还没被git管理的状态,我们这里称非stage状态。
changes to be commited是指进入stage状态的文件,stage是commit和未管理之间的一个状态,也有别名叫index状态,也就是git已经管理了这些改动,但是还没完成提交。
.gitignore中的文件,不会出现在以上三个状态中。
撤销操作
$ git checkout file 命令用于切换分支或恢复工作树文件
$ git reset HEAD file 回退文件,将文件从暂存区回退到工作区
$ git reset HEAD^ :回退版本,一个^表示一个版本,可以多个,另外也可以使用$ git reset HEAD~n这种形式
移动操作
$ git mv oldname newname 工作区中重命名文件,移动文件
git实际上并没有重命名移动的说法,是一系列操作的组合
在工作区中,把你需要的文件重命名和移动,在暂存区里把原有的文件删除了,在把新的文件添加进工作区
.gitignore文件
*.[oa] 匹配以o或者a结尾的文件
*~ 匹配有~的文件
*.pyc 匹配所有以pyc为扩展名的文件
!test.pyc test.pyc文件不被忽略
\!test.pyc 若原来文件名是以!开头的需要转义符号
foo/ 匹配foo文件夹(foo文件不被匹配)
**/res **/意味着匹配0个或者多个目录,顶层文件的res会被匹配到,其他目录下的子目录的res也会被匹配到
在工作区的顶层目录下或者你需要的位置下创建.gitignore文件
工作区里面一些不希望被添加到暂存区和历史上的文件不被添加进去
添加到历史仓库
git commit -m “xxx”