config的作用域
-
local 只对某个仓库有效
-
global只对当前用户的所有仓库有效 (常用)
-
system对系统所有的登录的用户有效
查看对应作用域的配置:git config --list --[作用域]
配置对应作用域的属性:git config --[作用域] 属性 ‘属性值’ (注意在属性和属性值之间存在一个空格)
优先级:local > global > system
建立git仓库
-
已有的项目代码纳入Git的管理
cd 当前项目文件 git init
-
新建的项目直接进行Git的的管理
cd 当前项目文件夹 git init your_project_name git your_project
增加新的文件
-
暂存区:暂时对要提交文件进行存储
-
工作目录:当前项目文件工作的目录
-
历史版本:项目提交的信息
固定套路
git add files
git status
git commit
git add中如果文件已经被git所监控,则可以使用git add -u命令来将变更的文件放入暂存区
给文件进行重命名
- git mv [原始文件名] [新的文件名]
git log查看历史记录
-
git log -n数字 查看最最近TopN的提交信息
-
git log -oneline 查看最近新的一条提交记录
-
git log --all 查看全部分支提交信息
-
git checkout [分支的名字] 切换分支
-
git branch 查看分支
–b [新建分支名字] [分支的commit id] 新建分支
图形化界面工具gitk
在命令行中输入gitk即可进入git的图形界面来对项目进行管理
.git文件夹探秘
在.git文件夹中,有以下一些文件:
- HEAD:表示当前指向具体分支的信息(指向refs文件夹中的信息),可以用
cat HEAD
查看具体的信息,比如当前指向master分支,即可得到ref: refs/heads/master
, - config:表示当前git在本仓库的配置信息,用
git config --local --list
可以获得其中的配置信息 - refs:git的具体分支的引用信息,里面包含heads和tags文件夹,表示的他们的所引用的所指向的信息,用
git cat-file -t [文件名]
可以产看具体的对象类型 - objects:该文件夹表示git中的对象信息,这些对象用于实现版本控制的功能
git中的对象
- 一个commit是由tree,parents,author和commiter所组成
tree是commit这个树的根,即项目文件的信息,
- tree中一般是由tree和blob所组成,tree表示的是文件夹的信息,而blob表示的是文件的具体信息(注意的是文件的内容相同都将生成同一个blob文件,这样的做是为了减少更多的空间)
分离头指针的情况的注意事项
有时在切换分支时会进入到分离头指针的情况,使用
git checkout
时指向一个未知的分支名称(指向一个具体的commit),这就会出现分离头指针的现象
优点:在对项目进行更改时,有些更改是试探性的,可能效果不好就会丢弃,那么可以采用分离头指针的来进行开发,这样如果预期的效果不好,那么直接切换到已经存在的分支上,则会对本次的变更进行自动的删除
缺点:有时在开发项目时由于不了解分离头指针的工作机制,会导致新修改的内容丢失,或者无法进行正常的与现有分支合并
进一步理解HEAD和branch
-
HEAD表示的可以表示当前的分离头指针指向的commit,也可以指向具体的branch
-
在使用
git checkout -b
命令时,不仅会创建一个新的分支,同时也会让HEAD指向新的分支 -
其实HEAD指向的就是commit的内容,那么我们可以利用HEAD来指代当前版本的项目信息,比如
git diff
命令就可以对不同的提交版本进行比较,比如git diff HEAD HEAD~1
表示与HEAD的上一个版本进行比较,~ + 数字 可以指代HEAD上面的所对应数字的版本信息