前端与移动开发----Git----Git基础使用

Git

在这里插入图片描述

准备工作

以前管理版本的方式

在这里插入图片描述

版本控制软件

什么是版本控制软件

  • 记录文件变化的一个软件
  • 版本是每次记录代码的快照

使用场景

  • 场景一:项目不断变化,改来改去,可能需要改回原来的代码
    • 可对代码每次的改动做记录,记录一次,形成版本快照
    • 可轻松将代码回退到任意一个版本。(可以使用之前版本中的代码、文件)
    • 电脑坏了了,版本也不会丢失 (前提: 你要把git仓库上传到远程服务器上)
  • 场景二:多个人合作开发同一个项目,代码合并到一个工程文件夹下
    • 使用版本管理软件合并代码

好处多多

  • 只需要记录几个命令, 快速上手, 自动管理版本(产生副本-不可见)

  • 易于对比: 每次版本之间的区别和变化

  • 易于回溯: 比如回退代码到之前稳定的版本

  • 不易丢失: 可以托管在服务器上(并且每个人电脑里都有所有版本记录), 本地/服务器电脑坏了也不怕

    在这里插入图片描述

  • 协作方便: 轻松实现多人开发同一个项目, 把大家写的代码合并到一个工程文件夹中

Git介绍

Git是一个开源分布式版本控制系统软件 最先进最流行的版本控制系统.

Git记录完整的文件快照

断网也可以在本地保存(但是等连网才能上传到中心服务器同步给他人)

Git安装

不要安装中文和特殊路径下, 不要挪动git软件的目录

下载地址: https://git-scm.com/

默认全都下一步即可完成安装

打开cmd终端, 输入命令 git --version (注意中间空格是必须的)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nmb4H5fV-1609125020693)(images/image-20201129200436492.png)]

如果出现版本号, 就代表git软件成功安装到了你的电脑中

Git概念 - 3个区域和3个状态

在这里插入图片描述

  • 工作区
    • 文件显示在磁盘上,供我们使用或修改的区域。项目文件夹就是工作区
  • 暂存区
    • 执行 git add .之后,文件由工作区,添加到了暂存区。 暂存区保存了下次将提交的文件列表信息。
  • Git 仓库(本地仓库)
    • 执行 git commit -m '提交说明' (单引号必须),暂存区 -> Git本地仓库。
    • 仓库区是 Git 中最重要的部分,代码只有提交到仓库,才会形成一次历史记录, 形成一个版本 (提交过才会被记录快照)
  • 远程仓库
    • Git服务器上的仓库,比如,码云gitee或者github网站上创建的的仓库或者自己有服务器创建git远程仓库,叫做远程仓库。远程仓库用于存储代码和发布项目,多人协作也需要远程仓库。

在这里插入图片描述

Git基础使用

本机 - 全局配置用户名和邮箱(一台只需要一次)

Git软件在工作的时候,需要知道你是谁?所以需要设置一个用户名和邮箱。

这个用户名和邮箱,最好使用你的码云账号,当然随便填也可以。(让别人能联系到你)

具体做法:

  1. 任何文件夹,空白处,右键 --> Git Bash Here

  2. 依次执行下面两行代码 --global 会将配置项保存到用户配置 (以后这台计算机, 无论哪个git项目文件夹都使用这个名字和邮箱

  3. 执行命令 - 设置你的名字

  4. git config --global user.name "dongsancheng"
    
  5. 执行命令 - 设置你的联系邮箱

  6. git config --global user.email "[email protected]"
    
  • 会配置到 C:\Users\lenovo\.gitconfig中

Git初始化

初始化本地git环境, 让git来监测本地文件, 搭建三大区域

创建一个项目文件夹,打开项目文件夹

注意:一定要在项目文件夹,右键–>Git Bash Here。

执行命令 - 初始化.git文件夹

  • git init
  • 执行 git init 命令之后,会在项目文件夹中生成一个隐藏的 .git 文件夹
  • Git 管理项目的每一次记录版本快照,都在 .git 文件夹里面保存着。所以这个文件夹不能删除
  • 项目没有==.git==,才需要git init

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dZ8Y8ilG-1609125020698)(images/image-20201129232421858.png)]

  • mac系统: shift Command . 可以显示隐藏文件

Git记录 - 代码变更

  1. 写代码测试

    • 随便新建文件, 里面随便写点代码
  2. 项目文件夹, 右击, Git Bash Here

    • 执行命令 (.代表项目文件夹 - 工作区一切 保存到 暂存区)

      • 只有添加到暂存区,才叫做被Git管理
      • 空文件夹不能暂存
    • git add .  
      
    • 再执行命令 (代表把 暂存区的一切 保存到 git本地仓库)

    • git commit -m '提交说明' 
      
    • 执行完,这两个命令,表示使用Git把当前代码及文件的改动记录起来了 - 有了一次快照

  3. 重复1-2这2步, 这个过程4次,多使用Git记录几次

查看 - 历史记录

查看提交日志

  • git log - 打印详细信息

  • 执行命令: (查看提交的日志 - 在一行简略显示)

  • git log --oneline
    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-adlxhmwO-1609125020701)(images/image-20201129234558773.png)]

体验 - 历史中穿梭

  • 执行命令 (可以在历史版本中穿梭 (版本号指的上图3885368))
  • git checkout 版本号   
    
  • 执行命令 (可以切换回到"现在") - master代表最近的一次提交

  • git checkout master
    

穿梭后 - 查看所有的版本号

穿梭到历史版本之后,通过 git log 查看不到未来的版本号

需要加 --reflog 选项,才能查看所有的版本号

  • 执行命令 (查看所有版本号, 简略版)
  • git reflog --oneline
    

查看文件的状态

再次修改/新增代码后 - 过多的话, 如何查看本地有什么文件变更呢?

  • 执行命令 (查看文件的几种状态)
git status
  • 未跟踪 - 新文件

    在这里插入图片描述

  • 已修改 - modified

    在这里插入图片描述

  • 已暂存 - 执行git add . 以后的再查看git status

    在这里插入图片描述

  • 已提交 - 执行git commit -m ‘提交信息说明’ 以后再运行git status

    在这里插入图片描述

    • 表示没有什么东西可以提交了;即,所有的内容都已经提交过了 (都已经保存到本地仓库了)

如果看到有红色字体或绿色字体的文件,说明还有文件没有提交到本地仓库形成快照 (git不负责报错哦)

Git高级_分支

创建分支

使用Git管理项目的时候,会有很多次提交。把每一次提交连接起来,向一条线一样。这就叫做分支。

初始化之后,默认是在master分支上进行操作的,master分支也叫做主分支。

相关命令:

  • 执行命令 - 查看所有本地分支

  • git branch
    
  • 执行命令 - 创建新分支 (dev叫分支名, 随便起)

  • git branch dev
    
  • 执行命令 - 切换分支 (现在本地代码都在dev这个分支下) - 如果想回到master就把dev写成master

  • git checkout dev
    

测试:

  • 在dev分支上,写点代码,提交一下(暂存, 提交)
  • 切换回到master分支, 查看代码不同

切换分支之前,必须把当前分支的代码全部提交到仓库

如果需要把dev分支的代码合并到master分支

  • 切换到master

  • 执行命令 - 当前在master分支上, 把dev上修改的代码合并过来

  • git merge dev
    

打印git log --oneline 查看master分支和dev分支

两种合并

快进模式 (Fast-forward)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hmKTDMph-1609125020708)(images/image-20201201215140155.png)]

  • dev分支,它包含master分支的所有提交记录

  • 合并的时候,只需要让maser分支的代码和dev分支的代码一样即可

  • 执行命令 - 删除无用的分支(不会影响master里的代码 -d代表删除意思)

  • git branch -d dev
    

合并模式

  • 新建newdev分支

  • git branch newdev
    
  • 切换到newdev分支上

  • git checkout newdev
    
  • 然后删除一点原来的js代码, 再它上面修改新的代码(保证和原来master状态下, 不一样就行)

  • 再切换到master分支

  • git checkout master
    
  • master分支的同样地方也进行了修改, 然后 自己提交一份 (非常重要, 不这样操作就不会显示冲突了)

  • 在master分支下, 把newdev分支的内容合并上来

  • git merge newdev
    
  • 报冲突如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o1UUVFio-1609125020709)(images/image-20201130151519258.png)]

  • 也就是说,一个分支不包括另一个分支的全部提交记录

在这里插入图片描述

  • 这种模式的合并,有可能会有冲突出现上述画面,需要执行下面的操作:

  • 回到vscode查看代码冲突的地方, 解决: 找到对方是谁, 删除谁的, 还是都保留下来

解决冲突

在合并代码的时候,有可能会有冲突,遇到冲突,解决冲突,然后提交即可。

执行 git merge 分支名 的时候,如果出现如下画面,表示有冲突:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0oHREqCp-1609125020712)(images/image-20201130151849196.png)]

  • 打开有冲突的文件
  • 去掉分割线
  • 解决冲突
  • 保存代码,执行 git add .git commit -m '提交说' 从而完成这个合并。

远程仓库

注册码云账号

码云和github都提供仓库的托管服务。

区别是码云是国内的服务器,打开速度较快;github是国外的服务器,打开速度不能保证。

码云:https://gitee.com/ - 使用这个

github:https://github.com/

能登录成功就代表注册成功了, 要牢记账号/登录的方式

配置码云的SSH秘钥

秘钥就是一个钥匙, 开门的作用 (免登陆)

我们向码云或github网站推送代码的时候,最好使用SSH的方案,这个方案需要提前配置好秘钥。下面是具体的配置方法。

任何文件夹位置,空白处右键,选择右键菜单中的 “Git Bash Here”,执行下面的命令,可以生成SSH秘钥(包含一个公钥一个私钥)

  • 执行命令 (生成秘钥文件)

    • ssh-keygen 固定命令, 生成秘钥文件
    • -t 指定秘钥类型 (加密方式 - rsa加密)
    • -C 设置注释文字(如何联系你)
  • ssh-keygen -t rsa -C "[email protected]"
    

注意,回车执行命令,然后继续回车,回车…直至生成完毕~

最后生成的秘钥在:

Windows:
C:\Users\用户名\.ssh
# 例如: C:\Users\lenovo\.ssh

mac:
你的用户名那个文件夹中。 按shift+Commend+.  可以显示隐藏文件,然后就可以看到 .ssh文件夹了

找到 .ssh/id_rsa.pub,用vscode打开,复制里面全部的内容,配置到远程仓库

(重要) 相当于和远程仓库建立非账号密码方式的登录链接

  • 码云右上角头像下的设置
  • 左侧有 SSH公钥
  • 在显示的界面中,公钥把刚才.id_rsa.pub里的值都粘贴进去, 标题自动填充
  • 点击确定即可

创建远程仓库 - 获取SSH地址

在网站上创建一个项目, 申请一块磁盘空间 (如果自己有服务器, 在服务器上搭建一个git服务端的服务也一样)

  1. gitee.com 首页登录后
  2. 右上角+号, 新建仓库

自己公司项目可不要公开啊,可能被敌对机构窃取

在这里插入图片描述

  1. 点击创建后 千万不要点初始化 readme 文件

在这里插入图片描述

推送代码到远程

本地已有仓库

  1. 执行命令 - 本地添加远程仓库地址(远程分支名字叫origin)
  • git remote add origin 你的地址
    
    • remote 远程
    • add 添加
    • origin 源,这个名字可以自定义,叫什么无所谓。
    • 最后,是ssh地址(注意,不是https地址)
  • 如果报错: 假如提示origin名字这个本地仓库已经用过了, 可以先移除 git remote remove origin 再执行这句命令
  • 前提远程仓库上什么都没有 git push -u origin master
    • push 推送
    • origin 远程仓库地址,和上一条命令中的origin对应
    • master,表示推送本地的master分支
    • -u,首次推送需要 -u。(表示把本地的master和远程的master直接关联起来) ((全称叫upstream, 上传)
  • 假如远程仓库有东西, 先拉取下来和本地仓库的文件合并了 (rebase是把远程的直接合并到本地master里)
    • git remote add origin 你的地址
    • git pull origin master --rebase (多这一步)
    • 再执行, git push -u origin master
  • 可以网页上去看到远程仓库去看看 就都上来了 哈哈哈

只能把本地仓库的代码推送到远程仓库;不能把工作区的、暂存区的代码推到远程。

SSH警告

如果首次使用SSH,会出现一个SSH警告,提示如下

  • 如果提示 “Are you sure you want to continue connecting (yes/no/[fi....])
    • 输入yes,回车

在这里插入图片描述

注意事项

一个远程仓库只能放一个本地仓库的代码

在这里插入图片描述

是SSH不是https

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WvlbbM9O-1609125020718)(images/image-20200712102055340.png)]

新人报道 - 拉取远程仓库代码到本地

本地没有仓库

从组长要git的地址和秘钥

  1. 把秘钥粘贴到我们上面创建时的相同位置上即可
  2. 新建空白的文件夹(一定空白不能有隐藏文件)
  3. 直接运行命令 (不用初始化git)

克隆远程仓库到本地

  • 实际开发中,有些时候,我们需要把一个远程仓库克隆到本地

    • 开发项目的时候,可以先创建远程仓库,然后克隆到本地,再进行开发
    • 下载别人的代码的时候,可以选择克隆
    • 多人合作开发的时候,需要克隆合作伙伴的代码到本地
  • 克隆命令 - 再想要把远程仓库里代码下载的文件夹执行这个命令哦

    git clone [email protected]:lidongxuwork/test_119.git .
    

    克隆,相当于下载

  • 如果克隆的是自己的仓库,那么克隆之后,可以对代码进行修改,修改之后,直接 addcommitpullpush 即可。

  • 注意:克隆之后,路径并不是仓库的路径。需要把黑窗口关闭,进入项目文件夹,重新打开黑窗口

查看分支

git branch -a (-a代表远程分支也一起查看)

多人协作

实现原理:

  • 分支合并(把远程分支和本地分支合并到一起)

实现步骤:

  • 可以先创建远程仓库
  • 【可选】我先把基础的代码推送到远程仓库
  • 合作者,需要把远程仓库的代码,克隆到你的计算机中
  • 管理员邀请合作者共同来开发
  • 合作者,需要同意
  • 然后,管理员和合作者,都可以向远程仓库推送代码
    • 暂存 git add .
    • 提交 git commit -m ‘消息’
    • (与远程服务器上的合并) - 必须先拉取 git pull (前提是已经和远程服务器有过交互了, 否则请查看远程仓库配置章节第一次和服务器交互)
    • 拉取之后,如果有冲突,解决冲突,必须add、commit一次。
    • 最后推送。git push 即可把自己新写的代码, 同步到远程服务器 (别人拉取, 别人就有了你新写的代码了)

帮助文档

git help config - 自动弹出英文文档

中文文档:: http://gitref.justjavac.com/

忽略文件

.gitignore 这是一个忽略文件

有时候项目中有些文件, 无需让git管理, 我们可以配置在忽略文件中

使用规则:

#开头 是注释

/结尾的 是目录

/开头 防止递归文件夹

!开头 表示取反

还可以使用正则表达式来 匹配文件

# 忽略 index.css文件 (无论哪里的)
index.css

# 忽略所有的 .a 结尾的文件
*.a 

# 只忽略当前.gitignore文件同级目录下的TODO文件夹, 不忽略abc/TODO
/TODO  

# 忽略任何目录下名为build的文件夹
build/
    
# 忽略 doc/a.txt  doc/cbd.txt 但不忽略doc/ab/a.txt
doc/*.txt

# 忽略 doc/ 目录以及所有子目录下的 .pdf文件
doc/**/*.pdf

图形化界面

  • vscode
  • webstorm
  • sourceTree(最新版的sourceTree,低版本的windows可能安装不上)
  • 小乌龟(windows系统能用)

vscode

  • 暂存文件(git add .)

    在这里插入图片描述

  • 提交到本地仓库

    在这里插入图片描述

  • 推送

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

版本管理软件分类

  • 集中式,典型代表 SVN
  • 分布式,典型代表 Git

多账户的SSH本地配置

我有自己的gitee账户 / github账户 每个账户都有一个独立的秘钥 / 我同事的秘钥(我要拉取和推送代码)

.ssh/config 文件 - 填入这些配置即可

自己的gitee网站链接用的秘钥

Host gitee.com

HostName gitee.com

IdentityFile ~/.ssh/id_rsa_ziji_gitee

同事的gitee

Host gitee.com

HostName gitee.com

IdentityFile ~/.ssh/id_rsa_tz

如有不足,请多指教,
未完待续,持续更新!
大家一起进步!

猜你喜欢

转载自blog.csdn.net/qq_40440961/article/details/111836116