一、Git 和 Github 的区别
- Git:是一个【分布式版本控制系统】。【简单的说就是一个软件】。用于记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的软件。
- Github: (https://www.github.com)是一个为用户提供Git服务的网站,【简单说就是一个可以存放代码的地方(不过可以放的当然不仅是代码】)。Github除了提供管理Git 的 web 界面外,还提供了订阅、关注、讨论组、在线编辑器等丰富的功能。Github 被称之为全球最大的基友网站。
二、下载安装 Git
- 下载安装路径: https://git-scm.com/downloads
- 查看是否安装成功: 在电脑桌面点击鼠标右键,面板出现 【Git Gui here】说明 【Git 安装成功】。
- 使用前全局配置 Git :在桌面空白处点击右键,点击面板 "Git Bash Here" 来打开 Git 命令行窗口,目的是让Git 知道之后的每一步操作是哪个用户操作的。
$ git config --global user.name "gitHub账号名"
$ git config --global user.email "gitHub绑定的邮箱"
-
查看 Git 【姓名、邮箱】有没有配置成功:
image.png
-
三、 Git 在本地的操作三个区域
image.png- 工作区:就是代码编辑的文件夹【项目根文件夹】
-
缓存区和Git仓库,就是 【.Git隐藏文件夹】
image.png
-
四、Git在本地的操作流程
image.png五、 Git 建立本地仓库操作
- 什么是仓库:
仓库又名版本库。可以理解为是一个目录。用于 【存放代码的】。这个目录里面的所有文件都可以被 Git 管理,每个文件的修改、删除、新增等操作 Git 都能跟踪到。
- 什么是仓库:
- 为什么要创建仓库:
当我们需要让 Git 去管理某个新项目/ 已存在项目的时候,这时就需要创建仓库了。注意,创建仓库时使用的目录不一定要求是空目录,选择一个非空目录也是可以的。但是不建议在 【现在项目上】来学习 Git ,否则造成的【一切后果本人概不负责】。
- 为什么要创建仓库:
- 注意: 为了避免在学习或使用过程中出现各种奇葩问题,请不要使用包含中文的目录名(父目录也是如此)。
- 创建新目录:
$ mkdir "项目文件夹名称(禁止包含中文)"
$ mkdir "pro_git"
- 进入新目录:
$ cd "上面建立的新目录名称"
$ cd "pro_git"
image.png
- Git 创建仓库【目的:让Git 知道,它需要来管理这个目录】
$ git init
image.png
表现:Git 仓库初始化,执行之后会在项目录下创建 【.git】的隐藏目录,这个目录是Git 所创建的,不能删除,也不能随意更改其中的内容。
- 将 【工作区】的文件提交到 【缓存区】,
在【工作区】内,当新建(修改、删除)一个文件,都意味着【工作区】内文件发生了变化。
有以下三种提交方法:
- 将 【工作区】的文件提交到 【缓存区】,
- 一个文件提交到 【缓存区】
git add 文件名
2) 多个文件提交到 【缓存区】
git add 文件名1 文件名2 文件名3 ...
- 目录下全部文件提交到【缓存区】
git add .
六、时光机 - Git 版本回退
版本回退分为两个步骤进行,第一个是【查看版本】,确定【需要回到的时刻点】
1. 查看版本
- 查看版本指令一:显示【时刻ID、时间文本、提交备注信息】
git log
image.png
- 查看版本指令二:显示【时间ID、提交备注信息】
git log --pretty=oneline
image.png
2.版本回退
- 回到【过去的版本】
git reset --hard 'commit的ID'
image.png
- 回到过去之后,再想要回到之前的最新的版本,则需要指令查看历史操作记录。以得到最新的 commit ID.
git reflog
image.png
- 回到【之前的最新的版本】
git reset --hard 9604958
image.png
提示:
a. 要想回到过去,必须先得到commit id, 然后通过 【git reset --hard '"commit id"】进行版本回退
b. 要想回至未来,需要使用 【git reflog】进行历史操作查看,得到最新的commit id
c. 在写回退指令的时候,commit id 可以不用写全,git 会自动识别,但是也不能写太少, 至少需要写前 7 位字符。
七、 Github 远程仓库
- 使用 clone 指令克隆【线上仓库到本地】
git clone 线上仓库地址
image.png
image.png
- 在仓库上做对应的操作 【提交暂存区、提交本地仓库、提交线上仓库、拉取线上仓库】
a) 【提交暂存区】 git add
- 在仓库上做对应的操作 【提交暂存区、提交本地仓库、提交线上仓库、拉取线上仓库】
git add .
image.png
b) 【提交到本地仓库】
git add commit -m "readme文件初始化"
image.png
c) 【提交线上仓库】 git push
git push
image.png
image.png
提示:
首次往线上仓库提交内容的时候,需要打开 【.git】里面的config 文件进行账户、密码配置
url = https:// 【github账户名】:【github账户密码】@github.com/xiaxiaolanGitHub/git-test.git
image.png
d) 【拉取线上仓库】git pull
** 先在线上仓库里新建一个index.js**
image.png
发现本地仓库没有index.js这个文件
image.png
git pull
通过 【git pull】拉取线上仓库文件
提醒:
在每天工作的第一件事情就是 【git pull】拉取线上最新版本的文件,每天下班最后要做的一件事是 【git push】将本地代码提交到线上仓库。
八、Git 的分支操作
-
1.什么是分支?
image.png
在版本回退的章节里,每次提交之后都会有记录,Git 把它们串成时间线,形成类似时间轴的东西,这个时间轴就是一个分支,我们称之为【master分支】
- 查看分支 【git branch】 【*】表示项目当前处在这个分支上
git branch
image.png
- 创建分支【 git branch 分支名】
git branch 分支名
image.png
- 切换现有分支 【git checkout 分支名】
git checkout 分支名
image.png
image.png
- 创建新分支的同时并切换这个新创建的分支为主分支 【git checkout -b 分支名】,相当于执行了上述 3 和 4 操作,创建新分支【git branch 分支名】和切换分支 【git checkou 分支名】
git checkout -b 分支名
image.png
-
在当前【build分支]里文件加内容,并提交到本地仓库
image.png
image.png
切换到【master分支下观察readme文件里的内容 】
image.png
-
- 合并分支 【git merge 被合并的分支名】,合并所有分支后,我们需要将【master 分支】【提交到线上远程仓库】中。
git merge build
image.png
- 删除分支 【git branch -d 要删除的分支名】,在删除这个分支,要退出要删除的分支上才能删除成功。
git branch -d 要删除的分支名
image.png
-
提交到线上仓库
现在我们看githup 线上仓库,还是一个分支,且readme文件里内容没有修改
image.png
这里候我们需要提交到线上仓库,【git push】
-
git push
image.png
九、冲突的产生与解决
-
1 【模拟冲突产生】
同事在我下班上传代码后,在线上新加了一行内容
image.png -
2 我上班后在readme里新加了一行我自己写的内容。
image.png -
3 现在我打算把我今天的代码【git push】提交到线上仓库,发现提交失败了,git 提示我先【git pull】拉取线上代码到本地
image.png
【解决冲突】
-
4 按照提示,我【git pull】一下,把线上仓库的代码拉取到本地仓库。
image.png
-5【git pull】之后,同事和我写的代码合并了,是git 自动帮我合并的,看下图箭头上文字,merge 合并到readme.text文件当中了。
image.png
-
6 和同事商量哪个代码是需要的,需要的留下,不需要的删除,以下是全部需要的,文件最好不要鼠标右键新建,这样会出现乱码现象。用专门的代码书写工具新建,以下忽略乱码。
image.png
-7 最后我再提交到线上仓库。
git add .
git commit -m "提交内容备注"
git push
image.png
-
8 查看 线上仓库里,发现有同事的代码和我今天的代码都提交成功了。
image.png
十 、 忽略文件操作
https://ke.qq.com/course/462730?taid=4768332822024074&dialog=1
-
1 . 场景: 在项目目录下有很多万年不变的文件目录、例如css、js、images、等,或者还有一些目录即便有改动,我们也不想让它提交到远程仓库的文档。此时我们可以使用"【忽略文件】或不忽略文件的规则",规则对【当前目录及其子目录生效】。
注意:该文件因为没有文件名,没办法直接在 window 目录下直接创建,可以通过命令行【touch .gitignore】来创建
在 【.gitigore文件】中,常见规则写法有如下几种:
1 ) /mtk/ 表示过滤掉整个文件夹
2) *.zip 表示过滤所有【.zip】文件
3) /mtk/do.c 表示过滤某个具体文件
4) !index.php 表示不过滤具体某个文件 -
2 新建了一个js文件夹,里面有一个index.js 文件
image.png -
3 我们把代码提交到远程仓库
image.png -
4 上面操作我们发现是把index.js 提交到线上仓库了。现在我们在 js 文件夹下再新建一个 tool.js , 我们不想把这个 tool.js 提交到远程仓库。
image.png -
5 要想不把js 里的文件提交到远程仓库,我们现在需要建一个 【.gitignore】文件
touch .gitignore
image.png
-
6 在新建好的 【.gitignore】文件里进行配置
image.png -
7 我们再把这些代码提交到线上仓库
image.png -
8 我们现在到线上仓库里看下 js 文件夹下的 tool.js 发现没有提交上去。
image.png -
9 我们再把 【.gitignore文件】删除掉,再次提交发现 【js】下线的文件都提交到线上去了。
image.png
网友评论