learn-Git(笔记)

439 阅读7分钟

一.理论知识:

什么是Git?

Git是免费、开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。

Git的相关理论基础

  1. Git的四大工作区域
  2. Git的工作流程
  3. Git文件的四种状态
  4. 一张图解释Git的工作原理

Git的四大工作区域

先复习Git的几个工作区域:

image.png

  • Workspace:你电脑本地看到的文件和目录,在Git的版本控制下,构成了工作区。

  • Index/Stage:暂存区,一般存放在 .git目录下,即.git/index,它又叫待提交更新区,用于临时存放你未提交的改动。比如,你执行git add,这些改动就添加到这个区域啦。

  • Repository:本地仓库,你执行git clone 地址,就是把远程仓库克隆到本地仓库。它是一个存放在本地的版本库,其中HEAD指向最新放入仓库的版本。当你执行git commit,文件改动就到本地仓库来了~

  • Remote(遥远的;偏僻的;疏远的):远程仓库,就是类似github,码云等网站所提供的仓库,可以理解为远程数据交换的仓库~

Git的工作流程

上一小节介绍完Git的四大工作区域,这一小节呢,介绍Git的工作流程咯,把git的操作命令和几个工作区域结合起来,个人觉得更容易理解一些吧,哈哈,看图:

image.png

git 的正向工作流程一般就这样:

  1. 从远程仓库拉取文件代码回来;
  2. 在工作目录,增删改查文件;
  3. 把改动的文件放入暂存区;
  4. 将暂存区的文件提交本地仓库;
  5. 将本地仓库的文件推送到远程仓库;

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状态.

image.png

一张图解释Git的工作原理

image.png

日常开发中,Git的基本常用命令

  1. git init
  2. git clone
  3. git checkout -b dev
  4. git add
  5. git commit
  6. git log
  7. git diff
  8. git status
  9. git pull/git fetch
  10. git push

二.正式开始演示:

1.下载 由于翻墙下载的速度比较慢 在电脑管家里面下载 (node也是可以在这下载)

image.png 一直点下一步默认选择 就行

随便进入一个目录 git init 初始化 就会出现 .git文件

创建版本库 image.png

image.png

添加text.txt 文件 加入内容:

image.png image.png

下面做的操作命令:

  1. git status 查看状态
  2. git add 添加指定目录文件到暂存区
  3. git add . (git add *)添加当前目录的所有文件到暂存区
  4. git rm --cached test.txt 从暂存区删除指定文件 5.git commit -m [message] 提交暂存区到仓库区, message为说明信息
  • git commit [file1] -m [message] 提交暂存区的指定文件到本地仓库
  • git commit --amend -m [message] 使用一次新的commit,替代上一次提交

image.png

image.png

image.png

image.png

image.png

现在我们再输入新的内容 再提交到本地仓库

image.png

image.png

git允许有后悔药吃

查看提交到本地仓库的历史记录: git log

image.png

HEAD指向最新放入仓库的版本。 (也就是当前的版本)

回退到上一版本 一个小帽子就是一个版本 可以回退多个就多加对应的小帽子个数

git reset --hard HEAD^

image.png

或者 指定版本回退: 赋值那一串数字其中一部分就行

image.png

回退记录:

git reflog

image.png

git 撤销修改

image.png

没有提交到暂存区:

image.png

查看修改了什么(不一样的地方):

git diff

image.png

加的是文字 不好看出效果

image.png

image.png 新添加的内容 12345678910111213141516171819

image.png 回到没有修改文件之前:git restore test.txt

提交到暂存区,要想回到最初的版本:

image.png

  1. 回到没提交add(暂存区)
    git restore --staged test.txt

  2. 回到没有修改文件 git restore test.txt

image.png

image.png

image.png

git 删除文件

git rm 文件名

添加新的文件test2.txt

image.png

image.png

image.png

删除之后 要回到原来版本:

git reset --hard 04697ae

image.png

推送到远程仓库

新创建git远程仓库 gittest

image.png

git branch -M main

重命名分支 git branch (-m | -M) :

image.png

image.png

提交成功

现在拉取下来到本地:

git clone xxx

image.png

拉取到新的文件夹gettest中

image.png

拉取下来之后 再添加index.html

image.png

更新本地仓库

在原来的文件夹 继续推送到远程仓库

因为前面已经做了配置 现在直接push上去就行

image.png

来到本地的仓库更新:

git pull

image.png

分支

image.png

在master分支下创建分支:

git checkout -b dev1

-b :表示的是 branch 分支  创建分支的意思

上面的代码 是git checkout 分支名和 git branch 分支名 的合并



在分支的文件夹上添加内容

image.png

提交

切换并且创建dev2分支

删除原来的dev1 添加dev2

image.png

再次提交

切换回到有dev1文件的 master分支

image.png

再切换到 dev2 分支

image.png

git checkout 分支名

现在要在master分支上合并dev2分支

就是要在谁的分支上合并谁 就在谁的分支上输入

git merge xxx  (merge 合并)

image.png

合并之后一定要 先提交之后才可以切换分支不然会报错

image.png

合并了某个分支 其实他还是存在的

image.png

image.png

不能在自己的分支上删除自己哈

Cannot delete branch 'dev2' checked out at 'E:/git-LEARN'
git branch -d dev2

image.png

解决冲突

git checkout -b dev

在dev分支下 在dev1文件夹 dev1文件 添加 11112222333 的内容 提交之后 回到master分支相同目录下的相同文件dev1中添加 444455556666

在master合并之前 两个分支都是要提交完成才能操作

conflict (冲突的意思)

执行 git merge dev 之后:

image.png

image.png

内容如果是需要的就留下来

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,

<<<<<<<HEAD是指主分支修改的内容,>>>>>>> dev是指dev分支上修改的内容

所以呢,我们确定到底保留哪个分支内容,还是两个分支内容都保留呢,然后再去修改文件冲突内容~

image.png

再次提交:

image.png

查看分支合并信息:

git log --graph

image.png ps:

image.png

分支管理:

image.png

image.png

dev分支:

image.png

还没写完成 不能提交成为版本 通过:

git stash

image.png

切换到bug分支

image.png

提交

切换到主分支进行合并

image.png

  • 请输入一个提交消息来解释为什么合并是必要的,
  • 特别是当它将一个更新的上游合并到一个主题分支时。
  • 以“#”开头的行将被忽略,空消息将中止提交。

退出: 按键盘左上角"Esc",输入":wq",注意是冒号+wq,按回车键即可

image.png

git stash list (保存的列表)

image.png

git stash apply

image.png

image.png

git stash apply stash{x} 

如果上面stash列表有多个 可以指定返回指定的那个

image.png

git 忽略文件夹

手动创建.gitignore文件

开发中由于npm依赖包太大 我们是不提交到仓库去的

image.png

image.png

参考: www.cpengx.cn/p/553.html www.cpengx.cn/p/554.html