Git相关知识点

1.Git与SVN区别

  • Git 属于分布式版本控制系统,而 SVN 属于集中式版本控制系统。
  • 分布式版本控制每个人的电脑上就有一份完整的代码,而集中式版本控制只有中央服务器拥有一份代码。所以集中式版本控制存在安全问题,当中央服务器挂了所有人都没办法工作了。
  • 集中式版本控制需要连网才能工作,如果网速过慢,那么提交一个文件会慢的无法让人忍受。而分布式版本控制不需要连网就能工作。
  • 分布式版本控制新建分支、合并分支操作速度非常快,而集中式版本控制新建一个分支相当于复制一份完整代码。

注意:GitHub类似于一个中央服务器。

2.Git基本工作流程

主要涉及到四个关键点:

  • 工作区:本地电脑存放项目文件的地方。
  • 暂存区(Index/Stage):在使用git管理项目文件的时候,其本地的项目文件会多出一个.git的文件夹,将这个.git文件夹称之为版本库。其中.git文件夹中包含了两个部分,一个是暂存区(Index或者Stage),顾名思义就是暂时存放文件的地方,通常使用add命令将工作区的文件添加到暂存区里;
  • 本地仓库:.git文件夹里还包括git自动创建的master分支,并且将HEAD指针指向master分支。使用commit命令可以将暂存区中的文件添加到本地仓库中;
  • 远程仓库:不是在本地仓库中,项目代码在远程git服务器上,比如项目放在github上,就是一个远程仓库,通常使用clone命令将远程仓库拷贝到本地仓库中,开发后推送到远程仓库中即可。

3.本地仓库的基本操作

a.装好后首次使用需要先进行全局配置

桌面空白处右键,点击“Git Bash Here”以打开Git命令行窗口

$ git config --global user.name "用户名"
$ git config --global user.email "邮箱地址"
b.进入创建好的项目,对Git仓库初始化(让Git知道,它需要来管理这个目录)

指令:git init

c.Git常用指令操作

查看当前状态:git status 【非必要】
添加到缓存区:git add 文件名

说明:git add指令,可以添加一个文件,也可以同时添加多个文件。
语法1:git add 文件名
语法2:git add 文件名1 文件名2 文件名3 …
语法3:git add .					【添加当前目录到缓存区中】
提交至版本库:git commit -m “注释内容”

在后续对于文件(可以操作1个或多个)操作之后,重复使用git add与git commit指令即可。

d. 版本回退
步骤:
	①查看版本,确定需要回到的时刻点
			指令:
				git log
				git log --pretty=oneline
	②回退操作
			指令:
				git reset --hard 提交编号

注意:回到过去之后,要想再回到之前最新的版本的时候,则需要使用指令去查看历史操作,以得到最新的commit id。

指令:git reflog

4.远程仓库的基本操作

4.1基于http/https协议

a. 创建空目录
b. 使用clone指令克隆线上仓库到本地仓库

语法:git clone 线上仓库地址

c. 在本地仓库上做对应的操作(提交暂存区、提交本地仓库、提交线上仓库、拉取线上仓库)

提交到线上仓库的指令:git push

注意:在首次向线上仓库提交内容时出现403的致命错误,原因是不是任何人都可以往线上仓库提交内容,必须需鉴权。(如果不加可以的话那就不加)
在这里插入图片描述
在设置好用户名密码之后再次尝试push指令。

拉取线上仓库:git pull
4.2基于SSH协议

该方式与基于HTTP/HTTPS协议方式相比,只是影响GitHub对于用户的身份鉴权方式,对于git的具体操作没有任何影响。

步骤:
生成客户端公私玥文件(需先自行安装OpenSSH):ssh-keygen -t rsa -C “注册邮箱”
将公钥上传到Github即可。

5.分支管理

使用分支的好处:

  • 同时推进多个功能开发,提高开发效率。
  • 各个分支在开发的过程中,如果某一分支开发失败,不会对其它分支造成影响。

我们的每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。在Git里,master分支为主分支。HEAD指针指向的就是当前分支。

一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:
在这里插入图片描述
每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。
当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:
在这里插入图片描述
你看,Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!

不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:
在这里插入图片描述
假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:
在这里插入图片描述
所以Git合并分支也很快!就改改指针,工作区内容也不变!

合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:
在这里插入图片描述

分支相关指令:
查看分支:git branch
创建分支:git branch 分支名
切换分支:git checkout 分支名 
删除分支:git branch -d 分支名
合并分支:git merge 被合并的分支名

注意:在删除分支的时候,一定要先退出要删除的分支,然后才能删除。

6.冲突的产生与解决

通过git pull命令,拉取远程分支上的代码并合并到本地分支,目的是消除冲突。打开冲突文件,解决冲突。最后重新提交。
通过git stash命令,把工作区的修改提交到栈区,目的是保存工作区的修改。
通过git stash pop命令,把保存在栈区的修改部分合并到最新的工作空间中。

7.忽略文件

场景:在项目目录下有很多万年不变的文件目录,例如css、js、images等,或者还有一些目录即便有改动,我们也不想让其提交到远程仓库的文档,此时我们可以使用“忽略文件”机制来实现需求。

忽略文件需要新建一个名为.gitignore的文件,该文件用于声明忽略文件或不忽略文件的规则,规则对当前目录及其子目录生效。
注意:该文件因为没有文件名,没办法直接在windows目录下直接创建,可以通过命令行Git Bash来touch创建。

touch .gitignore

常见规则写法有如下几种:

1)/mtk/               过滤整个文件夹
2)*.zip                过滤所有.zip文件
3)/mtk/do.c           过滤某个具体文件
4) !index.php			   不过滤具体某个文件	

在文件中,以#开头的都是注释。

8.git fetch和git pull命令之间的区别

简单来说:
git fetch branch是把名为branch的远程分支拉取到本地;
而git pull branch是在fetch的基础上,把branch分支与当前分支进行merge;
因此pull = fetch + merge。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值