Git学习笔记完善

Git学习笔记完善

1、版本控制(分布式版本控制)

版本迭代、版本管理器 ,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术

多人开发就必须要使用版本控制

常用的版本控制

  • Git
  • svn等

本地版本控制:记录文件每次的更新,可以对每个版本做一个快照,eg: version3 -> version2 -> version1

集中版本控制:将版本数据全部上传到服务器上便于管理

分布式版本控制:

每个人都拥有全部的代码!安全隐患

所有版本信息仓库全部同步到本地的每个用户,所以可以在本地查看所有版本历史,可以离线在本地提交,只需在联网时push到相应的服务器或者其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。

不会因为服务器损坏或者网络问题,造成不能工作的情况

2、Git与SVN最主要区别

GITSVN
分布式版本控制系统集中式版本控制系统
没有中央处理器,每个人电脑中都有一个完整版本库版本库放在中央处理器中
工作的时候可以不联网对网络带宽要求较高
版本的修改只需要用户间相互的推送版本的修改需要用户和服务期间的推送

Git是目前世界上最先进的分布式版本控制系统

3、Linux和Git之父李纳斯·托沃兹(Linus Benedic Torvalds) 1969、芬兰,俩周开发!!!

4、git下载安装

官网下载安装慢的话,去找一个镜像

卸载git

先删除环境变量,再卸载

mac下安装git:

1)使用国内镜像地址安装Homebrew :输入以下命令

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

2)安装git

brew install git

3)安装好之后先设置用户名邮箱地址:

git config --global user.name “yourname”

git config --global user.email “youremail”

实际上就是下面文件中的内容
在这里插入图片描述
在这里插入图片描述

5、git

Git Bash:Unix与Linux风格的命令行,使用最多,推荐

Git CMD:Windows风格的命令行

Git GUI :图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

6、基本的Linux命令学习

1)cd 改变目录

2)cd … 回退到上一个目录,直接cd进入默认目录

3)pwd 显示当前所在的目录路径

4)ls(ll) 都是列出当前目录中的所有文件,但ll列出的内容更为详细

5)touch 新建一个文件, eg: touch index.js就会在当前目录下新建一个index.js文件

6)rm 删除一个文件

7)mkdir 新建一个目录or新建一个文件夹

8)rm -r 删除一个文件夹, rm -r src 删除src目录

9)mv 移动文件 eg:mv index.html src

10)reset 重新初始化终端/清屏

11)clear 清屏

12)history 查看命令历史

13)help 帮助

14)exit 退出

15)#表示注释

7、Git配置(配置的本质就是文件)

所有的配置文件,其实都保存在本地

查看配置: git config -l

查看系统配置:git config --system --list

查看本地配置:git config --global --list

设置用户名邮箱地址:

git config --global user.name “yourname”

git config --global user.email “youremail”

8、git基本理论(核心)(参考https://mp.weixin.qq.com/s/Bf7uVhGiu47uOELjmC5uXQ)

Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果再加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CRUbs31C-1634646843952)(/Users/mr.wei/Library/Application Support/typora-user-images/image-20211012232922482.png)]

  • Workspace: 工作区,平时存放代码的地方
  • Index/Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
  • Reposity: 仓库区(或本地仓库),安全存放数据的位置,这里面有你提交所有版本的数据,其中HEAD指向最新放入仓库的版本

以上是本地的三个区域

  • Remote:远程仓库,托管代码的服务器,可以简单的认为是你的项目组中的一台电脑用于远程数据交换

本地的三个区域确切的说应该是git仓库中HEAD指向的版本:

图片
在这里插入图片描述

  • Directory:就是一个整体,一个仓库,被git管理
  • WorkSpace:需要git管理(进行版本控制)的文件和目录
  • .git:存放git管理信息的目录,初始化仓库时建立(git init)
  • Index/Stage:暂存区,进入本地仓库钱,我们把所有的更新放在暂存区
  • Local Repo:本地仓库,存放在本地的版本库,HEAD指向当前开发的分支,一般为创建分支之前指向主分支(master)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BU1FXGZV-1634646843953)(/Users/mr.wei/Library/Application Support/typora-user-images/image-20211014101904150.png)]

  • Stash:隐藏,是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态

git的工作流程

图片

9、Git项目搭建

创建工作目录与常用命令

工作目录(workspace)一般是你希望Git帮助管理的文件夹;路径中建议不要有

日常使用需要记住下面六个命令

在这里插入图片描述

本地仓库搭建

有俩种办法:一种是创建全新的仓库,另一种是克隆远程仓库

1、创建全新的仓库,需要用Git管理的项目的根目录执行:

# 在当前目录新建一个Git代码库
$ git init

2、执行后可以看到,仅仅在项目中多出了一个.git目录,关于版本等的所有信息都在这个目录里面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q9uE5yRr-1634646843955)(/Users/mr.wei/Library/Application Support/typora-user-images/截屏2021-10-13 下午9.48.19.png)]

克隆远程仓库

克隆远程目录,可以将远程服务器上的仓库完全镜像一份至本地

# 克隆一个项目和他的整个代码历史
$ git clone [url] 

10、Git文件

文件的四种状态

  • Untraced:未跟踪,在文件夹内,但没有添加到git库,需使用git add 命令将状态变为 Staged
  • Staged:暂存,使用git commit命令可以将文件同步上传到本地仓库之中,文件为Unmodify状态,执行git HEAD filename取消暂存,文件状态变为Modified
  • Unmodify:文件已通过git add命令添加入库,未修改
    • 若修改文件,则会变味Modified状态
    • 若使用git rm移除本地仓库,则会成为Untracked文件
  • Modified:文件被修改
    • 通过git add命令进入Staged状态
    • 使用git checkout 则丢弃修改,返回到unmodify状态(也就是从版本库中找出历史文件,覆盖当前的文件)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X5evepfV-1634646843955)(/Users/mr.wei/Downloads/qq_pic_merged_1634181352330.jpg)]

img

# 查看指定文件的状态
git status [filename]

#查看所有文件状态
git status

# git add . 					  添加所有文件到暂存区
# git commit -m "备注"	 提交暂存区的内容到本地仓库并附加提交信息

在提交时忽略某些文件

在主目录下建立".gitignore"文件,规则如下:

1、文件中的空行或#开始的行将忽略

2、可以使用Linux通配符,eg:(*)代表任意多个字符;(?)代表一个字符,([abc])代表可选字符范围,({string1, string2})代表可选字符串…

3、名称最前面加一个感叹号(!),表示例外,其不被忽略

4、路径名称最前面是(/),表示忽略的文件再次目录下面,而子目录中的文件不被忽略

5、路径名称最后面是(/),表示忽略的此目录下该名称的字目录,而非文件

以斜杠"/“开头表示目录;”/“结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件;”/"开始的模式匹配项目跟目录;如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录。

更多规则参考:https://www.cnblogs.com/kevingrace/p/5690241.html

*.txt 					#忽略所有.txt结尾的文件
!lib.txt 				#除了lib.txt
/temp						#仅忽略项目根目录下面的temp文件,但不包括/subdir/temp(就是仅仅忽略该项目根目录下面的temp文件夹,但不忽略该项目下字目录里面的文件夹)
build/ 					#忽略build/目录下的所有文件
doc/*.txt				#忽略	doc/notes.txt	但不包括 doc/server/arch.txt(即不包括其子目录下的文件夹)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8XbSbV5b-1634646843956)(/Users/mr.wei/Library/Application Support/typora-user-images/image-20211014171525137.png)]

11、注册使用码云

1)注册登陆,并新建仓库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mVwo7H6d-1634646843956)(/Users/mr.wei/Library/Application Support/typora-user-images/image-20211014180728902.png)]

2)克隆仓库到本地

git clone [url]

随后便可以在本地文件夹中添加文件,并且使用git add . 等命令提交同步至远程仓库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SUS8U60m-1634646843957)(/Users/mr.wei/Library/Application Support/typora-user-images/image-20211014181029929.png)]

12、Git命令总结

创建新仓库

  • 创建新文件夹,打开,然后执行
git init

检出仓库

  • 执行下面命令以创建一个本地仓库的克隆版本
git clone /path/to/repository
  • 如果是远端服务器上的仓库,命令是:
git clone /username@host:/path/to/repository

工作流

本地仓库由git维护的三颗“树”组成。

1、工作目录working dir,持有实际文件

2、缓存区 Index,像一个缓存区,临时保存你的改动

3、 HEAD,指向最近一次提交后的结果

添加与提交

首先,你可以计划修改/改动,使用如下命令,将它们添加到缓存区中

git add <filename>
git add *

随后使用以后命令实际提交改动,会将改动提交到HEAD,但是还没有到远程仓库

git commit -m "代码提交信息"

推送改动

  • 将HEAD中的最新改动推送到远端仓库:
git push origin master		

master可以是想要推送的任意分支

  • 如果本地没有克隆现有仓库,并想要讲你的本地仓库连接到某个远程服务器:
git remote add origin <server>

分支

不同分支相互间绝缘,创建仓库时,默认分支为master(也就是主分支),在其他分支上进行开发,完成后再将它们合并到主分支上

git checkout -b feature_x				# 创建一个名为feature_x的分支
git checkout master							# 切换回主分支
git branch -d feature_x					# 将feature_x分支删除
git push origin <branch>				# 将该分支推送至远端仓库,不然该分支就是 不为他们所见的

git push 命用于从将本地的分支版本上传到远程并合并。

命令格式如下:

git push <远程主机名> <本地分支名>:<远程分支名>

如果本地分支名与远程分支名相同,则可以省略冒号:

git push <远程主机名> <本地分支名>

更新与合并

git pull								# 更新本地仓库至最新改动,以在你的工作目录中获取(fetch)并合并(merge)远端的改动
git merge <branch>			# 合并其他分支到当前分支
# 当上述合并发生冲突时,需要自己手动进行文件的合并,改完相应的文件之后,需要执行:
git add <filename>
# 在合并之前,也可以使用如下命令查看:
git diff <source_branch> <target_branch>

标签

软件发布时,可以为其创建一个标签:

git tag 1.0.0	xxxxx		#创建一个叫做1.0.0的标签
# 后面的xxxx是你想标记的提交ID的前10位字符
git log								#获取提交的🆔
# 只要能保证ID唯一,不用10位也可以

替换本地改动

git checkout -- <filename>		# 使用HEAD中的最新内容替换掉你的工作目录中的文件。已经添加到缓存区的改动,以及新文件,都不受影响
# 假如想丢弃本地所有的改动与提交,可以到服务器获取最新的版本并将你本地主分支指向到它
git fetch origin
git reset --hard origin/master 	#origin是远程主机名

工具🔧

gitk															# 内建的图形化git
git config color.ui true	# 彩色的git输出
git config format.pretty oneline	# 显示历史记录时,只显示一行注释信息
git add -i												# 交互地添加文件至缓存区,也就是会询问

参考:

廖雪峰git教程

狂神说git教程

git使用简易指南

posted @ 2021-10-14 17:47  Mr__wei  阅读(58)  评论(0编辑  收藏  举报