一.理论知识:
什么是Git?
Git是免费、开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
Git的相关理论基础
- Git的四大工作区域
- Git的工作流程
- Git文件的四种状态
- 一张图解释Git的工作原理
Git的四大工作区域
先复习Git的几个工作区域:
-
Workspace:你电脑本地看到的文件和目录,在Git的版本控制下,构成了工作区。
-
Index/Stage:暂存区,一般存放在 .git目录下,即.git/index,它又叫待提交更新区,用于临时存放你未提交的改动。比如,你执行git add,这些改动就添加到这个区域啦。
-
Repository:本地仓库,你执行git clone 地址,就是把远程仓库克隆到本地仓库。它是一个存放在本地的版本库,其中HEAD指向最新放入仓库的版本。当你执行git commit,文件改动就到本地仓库来了~
-
Remote(遥远的;偏僻的;疏远的):远程仓库,就是类似github,码云等网站所提供的仓库,可以理解为远程数据交换的仓库~
Git的工作流程
上一小节介绍完Git的四大工作区域,这一小节呢,介绍Git的工作流程咯,把git的操作命令和几个工作区域结合起来,个人觉得更容易理解一些吧,哈哈,看图:
git 的正向工作流程一般就这样:
- 从远程仓库拉取文件代码回来;
- 在工作目录,增删改查文件;
- 把改动的文件放入暂存区;
- 将暂存区的文件提交本地仓库;
- 将本地仓库的文件推送到远程仓库;
Git文件的四种状态:
- 根据一个文件是否已加入版本控制,可以把文件状态分为:Tracked(已跟踪)和Untracked(未跟踪),而tracked(已跟踪)又包括三种工作状态:Unmodified,Modified,Staged
1.Untracked: 文件还没有加入到git库,还没参与版本控制,即未跟踪状态。这时候的文件,通过git add 状态,可以变为Staged状态
2.Unmodified(未更改的):文件已经加入git库, 但是呢,还没修改, 就是说版本库中的文件快照内容与文件夹中还完全一致。 Unmodified的文件如果被修改, 就会变为Modified. 如果使用git remove移出版本库, 则成为Untracked文件。
3.Modified(修改):文件被修改了,就进入modified状态啦,文件这个状态通过stage命令可以进入staged状态
4.staged:暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodified状态.
一张图解释Git的工作原理
日常开发中,Git的基本常用命令
- git init
- git clone
- git checkout -b dev
- git add
- git commit
- git log
- git diff
- git status
- git pull/git fetch
- git push
二.正式开始演示:
1.下载 由于翻墙下载的速度比较慢 在电脑管家里面下载 (node也是可以在这下载)
一直点下一步默认选择 就行
随便进入一个目录 git init 初始化 就会出现 .git文件
创建版本库
添加text.txt 文件 加入内容:
下面做的操作命令:
- git status 查看状态
- git add 添加指定目录文件到暂存区
- git add . (git add *)添加当前目录的所有文件到暂存区
- git rm --cached test.txt 从暂存区删除指定文件 5.git commit -m [message] 提交暂存区到仓库区, message为说明信息
- git commit [file1] -m [message] 提交暂存区的指定文件到本地仓库
- git commit --amend -m [message] 使用一次新的commit,替代上一次提交
现在我们再输入新的内容 再提交到本地仓库
git允许有后悔药吃
查看提交到本地仓库的历史记录: git log
HEAD指向最新放入仓库的版本。 (也就是当前的版本)
回退到上一版本 一个小帽子就是一个版本 可以回退多个就多加对应的小帽子个数
git reset --hard HEAD^
或者 指定版本回退: 赋值那一串数字其中一部分就行
回退记录:
git reflog
git 撤销修改
没有提交到暂存区:
查看修改了什么(不一样的地方):
git diff
加的是文字 不好看出效果
新添加的内容 12345678910111213141516171819
回到没有修改文件之前:git restore test.txt
提交到暂存区,要想回到最初的版本:
-
回到没提交add(暂存区)
git restore --staged test.txt -
回到没有修改文件
git restore test.txt
git 删除文件
git rm 文件名
添加新的文件test2.txt
删除之后 要回到原来版本:
git reset --hard 04697ae
推送到远程仓库
新创建git远程仓库 gittest
git branch -M main
重命名分支 git branch (-m | -M) :
提交成功
现在拉取下来到本地:
git clone xxx
拉取到新的文件夹gettest中
拉取下来之后 再添加index.html
更新本地仓库
在原来的文件夹 继续推送到远程仓库
因为前面已经做了配置 现在直接push上去就行
来到本地的仓库更新:
git pull
分支
在master分支下创建分支:
git checkout -b dev1
-b :表示的是 branch 分支 创建分支的意思
上面的代码 是git checkout 分支名和 git branch 分支名 的合并
在分支的文件夹上添加内容
提交
切换并且创建dev2分支
删除原来的dev1 添加dev2
再次提交
切换回到有dev1文件的 master分支
再切换到 dev2 分支
git checkout 分支名
现在要在master分支上合并dev2分支
就是要在谁的分支上合并谁 就在谁的分支上输入
git merge xxx (merge 合并)
合并之后一定要 先提交之后才可以切换分支不然会报错
合并了某个分支 其实他还是存在的
不能在自己的分支上删除自己哈
Cannot delete branch 'dev2' checked out at 'E:/git-LEARN'
git branch -d dev2
解决冲突
git checkout -b dev
在dev分支下 在dev1文件夹 dev1文件 添加 11112222333 的内容 提交之后 回到master分支相同目录下的相同文件dev1中添加 444455556666
在master合并之前 两个分支都是要提交完成才能操作
conflict (冲突的意思)
执行 git merge dev 之后:
内容如果是需要的就留下来
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,
<<<<<<<HEAD是指主分支修改的内容,>>>>>>> dev是指dev分支上修改的内容
所以呢,我们确定到底保留哪个分支内容,还是两个分支内容都保留呢,然后再去修改文件冲突内容~
再次提交:
查看分支合并信息:
git log --graph
ps:
分支管理:
dev分支:
还没写完成 不能提交成为版本 通过:
git stash
切换到bug分支
提交
切换到主分支进行合并
- 请输入一个提交消息来解释为什么合并是必要的,
- 特别是当它将一个更新的上游合并到一个主题分支时。
- 以“#”开头的行将被忽略,空消息将中止提交。
退出: 按键盘左上角"Esc",输入":wq",注意是冒号+wq,按回车键即可
git stash list (保存的列表)
git stash apply
git stash apply stash{x}
如果上面stash列表有多个 可以指定返回指定的那个
git 忽略文件夹
手动创建.gitignore文件
开发中由于npm依赖包太大 我们是不提交到仓库去的