Git学习笔记完善

Git学习笔记完善

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

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

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

常用的版本控制

  • Git
  • svn等

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

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

分布式版本控制:

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

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

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

2、Git与SVN最主要区别

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

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”

实际上就是下面文件中的内容
Git学习笔记完善_第1张图片
Git学习笔记完善_第2张图片

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)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:

Git学习笔记完善_第3张图片

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

以上是本地的三个区域

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

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

Git学习笔记完善_第4张图片
Git学习笔记完善_第5张图片

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

Git学习笔记完善_第6张图片

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

git的工作流程

Git学习笔记完善_第7张图片

9、Git项目搭建

创建工作目录与常用命令

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

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

Git学习笔记完善_第8张图片

本地仓库搭建

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

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

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

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

Git学习笔记完善_第9张图片

克隆远程仓库

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

# 克隆一个项目和他的整个代码历史
$ 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状态(也就是从版本库中找出历史文件,覆盖当前的文件)

Git学习笔记完善_第10张图片

# 查看指定文件的状态
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(即不包括其子目录下的文件夹)

Git学习笔记完善_第11张图片

11、注册使用码云

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

Git学习笔记完善_第12张图片

2)克隆仓库到本地

git clone [url]

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

Git学习笔记完善_第13张图片

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使用简易指南

你可能感兴趣的:(git,git)