一. Git是什么
Git是一个分布式版本控制系统
二. Git的工作流程与原理
- Workspace:工作区
- Index/Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
三. Git与SVN的最主要区别
- SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就会很慢
- Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
四. 安装git及配置用户信息
1.检测是否安装成功
git --version
或者:点击右键出现下图
2.git用户配置
-
因为Git是分布式版本控制系统,所以安装完git之后需要填写用户名和邮箱作为一个标识
-
通过命令显示当前的Git配置
$ git config --list # 可以查看到用户名和邮箱
-
设置提交代码时的用户信息 ------先配置用户名后配置邮箱,否则配置不成功
$ git config [--global] user.name "[name]" #配置用户名 $ git config [--global] user.email "[email address]" #配置邮箱地址
注意:
git config --global参数,有了这个参数,表示你这台机器上所有的git仓库都会使用这个配置,也可以对某个仓库指定不同的用户名和邮箱
五. Git常见的命令和操作
1.新建代码仓库
-
在当前目录新建一个git代码库
$ git init
-
新建一个目录,将其初始化为git代码库
$ git init [文件夹名称]
-
下载一个项目和它的整个代码历史
$ git clone [url]
-
克隆远程仓库时 会同时把日志 和 远程仓库地址一起复制下来
2.查看信息
# 显示有变更的文件
$ git status
# 显示当前分支的版本历史
$ git log
#显示远程仓库信息
$ git remote -v
# 显示某个远程仓库的信息
$ git remote show [remote]
3.Git的三个区
-
工作区
-
暂存区
-
历史区
生成一个版本,只能将暂存区的内容生成版本。上传的时候只能上传历史区的内容
将源文件添加到暂存区:
4.git的两个特殊文件
- .gitkeep 文件
git 不会管理空的文件夹,gitkeep可以让git管理空文件夹
- .gitignore 文件
在这个文件中输入不需要管理的文件,这些文件就可以忽略被git管理
5.添加/删除文件
1.添加
- 添加指定文件到暂存区
$ git add [file1] [file2] //file为文件名字
- 添加指定目录到暂存区,包括子目录
$ git add [dir] //dir为文件夹名称
- 添加当前目录的所有文件到暂存区
$ git add .
2.撤销
1.将暂存区拉回工作区
$ git reset HEAD -- 文件 #将某个文件从暂存区变为源文件
$ git reset HEAD -- 文件夹 #将整个文件夹从暂存区变为源文件
$ git reset HEAD -- . #将所有文件从暂存区变为源文件
2.撤销更改操作
使用场景:文件提交到本地仓库之后又进行了修改
-
更改之后的显示
-
查看区别
$ git diff text.txt
- 撤销更改操作
$ git checkout -- text.txt
3.版本回退
$ git reset --hard HEAD^ #有几个上档键就回退几个版本
$ git reset --hard 历史版本号
4.恢复暂存区
$ git checkout [file] # 恢复暂存区的指定文件到工作区
$ git checkout . # 恢复暂存区的所有文件到工作区
6.将代码提交到本地仓库
-
将暂存区指定文件提交到本地仓库
$ git commit [file1] [file2] ... -m "版本说明"
-
将暂存区所以代码提交到本地仓库
$ git commit -m "版本说明"
7.分支
-
创建分支,并停留当前分支
$ git branch [branch-name]
-
切换分支
$ git checkout [branch-name]
-
切换上一个分支
# 切换到上一个分支 $ git checkout -
-
新建一个分支,切换到该分支
$ git checkout -b [branch]
-
列出所有本地分支
$ git branch
-
列出所有远程分支
$ git branch -r
-
列出所有远程分支和本地分支
$ git branch -a
-
合并指定分支到当前分支
$ git merge [branch]
-
删除本地分支
$ git branch -d
-
删除远程分支
$ git push origin --delete index #为添加远程仓库地址的变量名
8.上传远程仓库操作
1.推送远程仓库命令
$ git push <远程主机名> <本地分支名>:<远程分支名> #提交过程
注意:
如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会在远程仓库被新建
例如:
$ git push origin master #本地的master与远程的master分支建立 “追踪关系”
$ git push origin index #远程与本地建立 "追踪关系" 远程仓库不存在index时 会被新建
2.拉取远程仓库版本
git pull <远程主机名> <远程分支名>:<本地分支名> #拉取过程
注意:
如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名)
# 取回远程仓库的变化,并与本地分支合并
$ git pull [remote] [branch]
9.建立远程仓库-以gitee为例
1.创建远程仓库
2.仓库初始化
注意:
-
创建远程仓库默认会创建一个master主分支
-
选择模板进行创建仓库时,默认存在一次提交,实际操作不一样
六.Git上传远程仓库过程分析
单个主分支(master)使用过程
1.本地仓库上传远程仓库
1.在本地文件夹下初始化一个本地仓库
注意:
-
使用 git remote -v 不会显示远程仓库信息
-
也不会有master分支,自动创建master分支无效,只有提交一次版本信息,会自动创建一个master分支
2.添加上传地址:
- 可以添加多个,建议一个
#其中的origin是变量名表示上传地址,可以自定义
$ git remote add origin https://gitee.com/caivictor/huaiwei.git
3.开始上传:
$ git push -u origin master # 其中的origin是表示地址的那个变量名
注意:
第一次推送master分支时,加上了 –u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令
-
首次推送时需要用户名和密码
-
第二次上传时只需要
$ git push
4.合并分支提交
- 在本地创建新分支并且在该分支下无法提交到远程仓库
因为分支未设置要提交远程的分支
-
解决方案
1.可以将其合并主分支 master 或者已经和远程仓库建立了 ”追踪关系“的分支上再进行提交
2.直接推送本地分支到远程仓库–远程仓库不存在时自动创建该分支
$ git push -u origin index #将本地index分支推送到远程仓库里
注意:
使用 -u 参数,第二次提交时 ,直接使用 git push 命令
3.建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]
5.解决分支冲突
- 让本地与远程同步
$ git pull
- 开辟新的分支,然后进行分支合并
git fetch origin master:tmp # 使用 fetch 获取远程最新信息并开辟一个临时分支
git diff tmp # 将当前分支和远程分支进行对比
git merge tmp # 将临时分支合并到当前分支
2.从本地仓库上传至含有Readme.md模板文件的远程仓库
1.使用模板初始化的仓库默认有提交次数
2.添加上传地址
$ git remote add https://gitee.com/caivictor/ta.git
3.开始上传----会上传失败
$ git push -u origin master
注意:
此时上传报出错误提示,原因是 本地仓库master分支 未与 远程仓库建立 “追踪关系”,远程仓库存在历史版本信息,无法建立“追踪关系”。 因为远程仓库存在自己历史版本信息,本地仓库也存在自己的历史版本信息,实际的情况是远程仓库和本地仓库是两个不同的的仓库,可以合并两者的版本信息进行合并
可以使用以下命令解决:
$ git pull origin master --allow-unrelated-histories #合并俩不同仓库的版本信息
3.克隆远程仓库过程
1.使用命令将远程仓库克隆到本地仓库
$ git clone
注意:
从远程克隆到本地仓库时,本地分支默认与远程仓库的分支建立 “追踪关系” ,自动得到默认设置 origin 远程仓库地址,和分支的版本信息。若远程仓库存在多个分支时,在本地仓库使用 git checkout [branch-name] 命令对远程仓库进行切换分支时,默认与远程仓库的该分支建立 “追踪关系” ,处理分支冲突和上传时操作一致
2.解决分支冲突和上传时
$ git push #上传
$ git pull #解决分支冲突
特殊情况输入
shift : 输入 wq
可以使用以下命令解决:
$ git pull origin master --allow-unrelated-histories #合并俩不同仓库的版本信息
3.克隆远程仓库过程
1.使用命令将远程仓库克隆到本地仓库
$ git clone
注意:
从远程克隆到本地仓库时,本地分支默认与远程仓库的分支建立 “追踪关系” ,自动得到默认设置 origin 远程仓库地址,和分支的版本信息。若远程仓库存在多个分支时,在本地仓库使用 git checkout [branch-name] 命令对远程仓库进行切换分支时,默认与远程仓库的该分支建立 “追踪关系” ,处理分支冲突和上传时操作一致
2.解决分支冲突和上传时
$ git push #上传
$ git pull #解决分支冲突
特殊情况输入
shift : 输入 wq
输入wq