一、什么是git
Git是目前世界上最先进的分布式版本控制系统。
二、git下载安装和配置
windows官网下载地址:Git - Downloads (git-scm.com) 按默认选项安装即可。
git初始化配置
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
## 检查已有的配置信息 git config --list
三、git简介
- 三大分区
git本地数据管理,有三个分区:工作区、暂存区和版本库。
工作区:平时存放代码的地方,是本地仓库的目录,不包括.git这个目录。
暂存区:用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息。个人觉得是git的一个安全机制,你可能会不小心提交一些错误的代码,你可以在这个区域进行CRUD,用git status可以查看暂存区有什么文件。
版本库:工作区隐藏的.git目录就是版本库,存放已经提交的数据,在你push的时候,就是把这个区域的数据放到远程仓库中。
远程仓库:托管代码的服务器。
- 三种状态
已提交(committed):表示数据已经安全的保存在本地仓库中。
已修改(modified):表示修改了文件,但是还没保存到本地仓库。
已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
如果出现了Untracked(未跟踪)状态,说明这个文件在本地仓库的目录里,但没有添加进去,不参与版本控制,通过git add 文件名将状态变为Staged。
- git目录简介
hooks:包含客户端或服务端的钩子脚本。这些被称为钩子的脚本可以在提交(commit)、变基(rebase)、拉取(pull)操作的前后运行。脚本命名预示着它的执行时机。如我们可以编写pre-push的脚本作为钩子,进行推送代码前的检查。
info:包含一个全局性排除文件。你可以将不想被git管理的文件记录到info的exclude文件中。
logs:保存日志信息。保存所有更新的引用记录。refs文件夹中有两个文件夹,其中, heads文件里面存储的是本地分支的对象,每个对象的文件名就是本地的一个分支名。 remotes文件夹里存储的是远程的所有分支对象,每个对象的文件名称就是远程的一个分支名称。 logs下的HEAD文件保存的是所有的操作记录,使用git reflog查询的结果就是从这个文件来的。
objects:存储所有的数据内容。 存放所有的git对象,哈希值一共40位,前两位作文件夹名称,后38位作为对象文件名。
refs:存储指向数据的提交对象的指针。 heads:保存了分支及其对应的提交对象。 remotes:远程仓库信息。 tags:记录重要版本。 config文件:包含项目特有的配置选项。 description文件:显示对仓库的描述信息。 HEAD文件:指示目前被检出的分支。 index文件:保存暂存区信息,一个二进制文件。
- 忽略文件
我们可以在git目录info里的exclude文件里编写忽略规则。
规则如下:
1.忽略文件中的空行或以井号(#)开始的行将会被忽略。
2.可以使用Linux通配符。例如*代表多个字符,?代表一个字符,**代表多级目录,方括号[abc]代表可选字符范围,大括号{str1,str2}代表可选的字符串
3.如果名称的最前面有一个感叹号,表示例外规则,将不被忽略
4.如果名称的最前面有一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略
5.如果名称的最后面是一个路径分隔符,表示要忽略的是此目录下该名称的子目录,而非文件(默认文件和目录都忽略)
*.txt 忽略所有.txt结尾的文件
!lib.txt 但lib.txt除外
/temp 仅忽略项目根目录下的TODO文件,但不包括其他目录temp
build/ 忽略build目录下的所有文件
doc/*.txt 会忽略doc/notes.txt 但不包括doc/server/arch.txt
- git分支
创建分支:git branch 分支名
作用:为你创建了一个可以移动的新的指针。它不会主动切换到新分支上,需要使用git checkout进行切换。[git branch 分支名 版本名 创建分支并指向该版本]
切换分支:git checkout 分支名
查看分支所指对象:git log --oneline --decorate
删除分支:git branch -d 分支名
合并分支:git merge 分支名
添加一个新的远程git仓库:git remote add 名字 url
远程仓库重命名:git remote rename 旧名字 新名字
克隆远程仓库:git clone url 注意:默认克隆时为远程仓库起的别名是origin。也可以在运行的时候自己取名,如git clone url -o 别名
推送项目到远程仓库:git push 远程仓库名 远程分支名
拉取数据: git fetch 远程仓库名 拉取数据到本地仓库,不会自动合并或修改当前的工作。
git pull 远程仓库名 远程分支名
分支模式:只在master分支上保留完全稳定的代码,还有名为develop或next的平行分支,用来做后续开发或者测试稳定性,一旦达到稳定状态,它们就可以合并入master分支了。
四、git快速上手
1.初始化新仓库
新建一个空的文件夹gitproject,在文件夹里,右击,选择Git Bash Here,输入git init,完成仓库初始化。
2.将要上传到远程仓库的文件,拖拽到gitproject里,然后打开Git Bash Here,将文件逐个/一次性全加入暂存区,使用git add 文件名或者git add ./。
3.将暂存区的文件添加到本地仓库,使用commit -m '描述信息'
4.将本地仓库的文件上传到远程仓库,先添加一个远程仓库:git remote add 名字 url(名字是自己取的,url是远程仓库的地址),再git push 远程仓库名 远程仓库分支名(名字是你前面取的那个远程仓库名)。
5.如果需要克隆远程仓库,用git clone url。在你push代码的时候,用git push origin 远程分支名(默认是master)。 因为在你克隆的时候,默认的远程仓库名是origin,不需要改。
6.拉取代码用git pull url。
git init
git add ./
git commit -m "提交描述"
git remote add origin 仓库地址
git push origin master