git学习笔记

186 阅读6分钟

一、什么是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本地数据管理,有三个分区:工作区、暂存区和版本库。 {9XR%3K_P%OTJAK_A8Z`~(J.png

工作区:平时存放代码的地方,是本地仓库的目录,不包括.git这个目录。

暂存区:用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息。个人觉得是git的一个安全机制,你可能会不小心提交一些错误的代码,你可以在这个区域进行CRUD,用git status可以查看暂存区有什么文件。

版本库:工作区隐藏的.git目录就是版本库,存放已经提交的数据,在你push的时候,就是把这个区域的数据放到远程仓库中。

远程仓库:托管代码的服务器。

  • 三种状态

已提交(committed):表示数据已经安全的保存在本地仓库中。

已修改(modified):表示修改了文件,但是还没保存到本地仓库。

已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

如果出现了Untracked(未跟踪)状态,说明这个文件在本地仓库的目录里,但没有添加进去,不参与版本控制,通过git add 文件名将状态变为Staged。
  • git目录简介

YPVMXD5SQNBPHSPG}UJ0Y.png

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