Git的基础使用

1,393 阅读13分钟

1. svn(集中式)与git(公布式)的区别

1.1 svn(集中式)

svn 因为每次存储的都是差异 需要的硬盘空间会相对的小一点 可是回滚的速度会很慢

  • 优点

    • 代码存放在单一的服务器上,便于项目的管理
    • 学习起来相对git简单
  • 缺点

    • 服务器宕机:员工写的代码得不到保障
    • 服务器炸了:整个项目的历史记录都会丢失

1.2 git(分布式)

git 每次存的都是项目的完整快照,需要硬盘空间相对大一点 (Git团队对代码做了极致的压缩 最终需要的实际空间比svn多不了太多 可是Git的回滚速度极快)

  • 优点

    • 完全的分布式
    • 不易丢失:可以托管在服务器上(并且每个人电脑里都有所有版本记录), 本地/服务器电脑坏了也不怕
    • 易于对比: 可以清楚区分文件改动和变化 。
    • 易于回溯:可以回到某个记录状态上查看文件。
    • 断网也可以在本地保存(但是等连网才能上传到中心服务器同步给他人)
  • 缺点

    • 学习起来比Svn陡峭

2. git是什么

  • git是一个版本管理控制系统软件 ,它可以在任何的时间点上,将文件的状态记录保存起来,也可以根据某个时间点,将文件恢复回来。(白话:文件管理器)

    • 优点

      • 不易丢失:可以托管在服务器上(并且每个人电脑里都有所有版本记录), 本地/服务器电脑坏了也不怕
      • 易于对比: 可以清楚区分文件改动和变化 。
      • 易于回溯:可以回到某个记录状态上查看文件。
      • 断网也可以在本地保存(但是等连网才能上传到中心服务器同步给他人)

19

3, 安装git

  • 下载地址:git-scm.com/downloads

    image-20210123184436689

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

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

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

4. git的基本工作流程

工作区暂存 区git仓库(本地仓库)
被git管理的项目目录执行 git add .临时保存文件执行git commit -m '提交说明' 保存到本地

image-20201130170608975

5. git使用前的配置

  • 在使用 git 前,需要告诉 git 你是谁,在向 git 仓库中提交时需要用到。

    • 具体做法:(全局配置)

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

        image.png

      2. 配置提交人姓名:git config --global user.name '提交人姓名'

      3. 配置提交人姓名:git config --global user.email '提交人邮箱'

      4. 查看git配置信息:git config --list

    • 注意

      1. 如果要对配置信息进行修改,重复上述命令即可。
      2. 配置只需要执行一次。
      3. 悄悄告诉你,提交人姓名和提交人邮箱可以随便写,但是格式要对哦
  • 提交步骤

    1. git init    //初始化git仓库
      
    2. git status //查看文件状态
      
    3. git add .  //文件列表` 追踪文件
      
    4. git commit -m '提交信息'  // 向仓库中提交代码
      
    5. git log //查看提交记录
      git log --oneline //查看提交记录--在一行简略显示
      

      详细步骤:

      • 创建一个项目文件夹,打开项目文件夹,右键-->Git Bash Here。。

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

      • 执行 git init 初始化,会生成.git文件夹,用来管理项目文件夹

        注意:.git文件是隐藏的很重要,每一次的记录状态都保存在着,不能删除

        只有项目文件夹中没有==.git== 才需要git init初始化

        mac系统: shift+Commend+. 可以显示隐藏文件

      • 执行 git add .(add后面有个点)保存到 暂存区,再执行git commit -m ‘提交说明’

        注意:空文件件不能暂存

      • 执行完这==两====个命令====,才表示记录一次文件状态和向本地仓库提交一次代码

        注意:必须完成这个两个命令才算向仓库提交一次代码,

5. git进阶

  • 分支

    • 为了便于理解,暂时可以认为分支就是当前工作目录中代码的一份副本。

      使用分支,可以让我们从开发主线上分离出来,以免影响开发主线。

  • 分支细分

    1. 主分支(master):第一次向 git 仓库中提交更新记录时自动产生的一个分支。

    2. 开发分支(develop):作为开发的分支,基于 master 分支创建

      09

    3. 功能分支(feature):作为开发具体功能的分支,基于开发分支创建

      10

    4. 功能分支 -> 开发分支 -> 主分支

  • 分支命令

  1. git branch  // 查看所有分支
    
    git branch -a  //查看远程仓库所有分支
    
  2. git branch 分支名称   // 创建分支
    
    git branch -d 分支名称 // 删除本地分支(分支被合并后才允许删除)(-D 强制删除:谨慎使用-D)
    
    git push origin --delete 远程分支名 //删除远程分支
    
  3. git checkout 分支名称   //切换分支 切换分支之前必须把当前分支代码全部提交到仓库
    
    git checkout -b 分支名称  // -b 切换分支 的同时创建分支 
    
  4. git log  //命令可以显示所有提交过的版本信息
    
    git log --oneline //命令可以显示所有提交过的版本信息 --提交远程的版本信息
    
    git reflog  //可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
    
  5. git merge 来源分支  // 合并分支  合并之前切换到主线master 再执行命令合并 ----不保留分支的commit历史
    
    git merge --no-ff 来源分支     // --no-ff,保留分支的commit历史
    
    git merge --squash 来源分支    // --squash,把多次分支commit历史压缩为一次
    
    
  6.   // 如果你想重置(回退)到某一版本,可以将 `--hard` 改为具体的Commit的id如: 
    git log  //可以查看具体的commit的id
      
    git reset 1d7f5d89346   //回退到某一版本但保存自该版本起的修改
    
    git reset --hard 1d7f5d89346   //回退到某一版本并且放弃所有的修改
    
  7.  //将分支推送到远程码云上,先切换到分支上,在执行 git push -u origin 分支名称
    git checkout 分支名称       // 先切换到分支上
    git push -u origin 分支名称  //将分支推送到码上
    
  8. git commit --amend //commit 提交后,修改此次的提交说明 
    
  9.    //相当于指定分支的代码与当前分支的代码合并到了一起。
      git pull origin 分支名称
    
  10.    //克隆指定分支的代码。
      git clone -b 分支名称 项目地址
    
  11.   git tag -a 标签名 分支名   //为当前提交位置设置一个别名
      git push --tags  //将本地标签名同步至远程仓库
    
  • 暂时保存更改

    • 在git中,可以暂时提取分支上所有的改动并存储,让开发人员得到一个干净的工作副本,临时转向其他工作。

      • 使用场景:分支临时切换

        • 存储临时改动:git stash
        • 恢复改动:git stash pop
    • 在git 在pull或者合并分支的时候有时会遇到这个界面

      • 存储临时改动:请输入提交消息来解释为什么这种合并是必要的

    1. 按键盘字母 i 进入insert模式
    
    2. 按键盘左上角"Esc"
    
    3. 输入 :wq!  注意是冒号 + wq!,按回车键即可 //wq!为强制保存
       输入 :q!    // q! 为强制退出 此界面
    
  • 合并冲突

    • 在多人同时开发一个项目时,如果两个人修改了同一个文件的同一个地方,就会发生冲突。冲突需要人为解决。 image-20201130151849196

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

      image-20201130151628578

  • 其他问题

    • 如出现认证失败或无权限 image.png

    • 解决方法--本机电脑的凭据进行修改 git的凭据

    Snipaste_2022-07-28_18-43-44.png

6. 远程仓库

  • 注册码云(gitee)账号

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

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

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

      github:github.com/

  • 配置码云的SSH秘钥

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

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

      • 公钥名称:id_rsa.pub
      • 私钥名称:id_rsa
    • ssh-keygen -t rsa -C "xxxxx@xxxxx.com"  //执行命令生成秘钥文件
      
      
      • ssh-keygen 固定命令, 生成秘钥文件
      • -t 指定秘钥类型 (加密方式 - rsa加密)
      • -C 设置注释文字(如何联系你)
    • SSH生成

    • 按照提示完成三次回车,即可生成 ssh key。通过查看电脑C盘 ~/.ssh/id_rsa.pub 文件内容,用vscode打开,复制里面全部的内容,配置到远程仓库

      • WindowsC:\Users\用户名.ssh
        # 例如: C:\Users\lidongxu.ssh
        
        mac:
        你的用户名那个文件夹中。 按shift+Commend+.  可以显示隐藏文件,然后就可以看到 .ssh文件夹了
        
    • 复制生成后的 ssh key,通过仓库主页 「设置」->「SSH公钥」->「添加公钥」 ,添加生成的 public key 添加到仓库中。

      image-20210124120102557

    • 添加后,在终端(Terminal)中输入

      • ssh -T git@gitee.com
        
      • 首次使用需要确认并添加主机到本机SSH可信列表。若返回 Hi XXX! You've successfully authenticated, but Gitee.com does not provide shell access. 内容,则证明添加成功。
      • SSH添加提示
    • 添加成功后,就可以使用SSH协议对仓库进行操作了。

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

    1. gitee.com 首页登录后

    2. 右上角+号, 新建仓库

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

      image-20210124122717914

    4. 点击创建后 ==千万不要点初始化 Readme 文件==

    5. 推送代码到远程

      image-20210124143048444

    • 解释后面两句

      • 执行命令 - 本地添加远程仓库地址(远程分支名字叫origin, ==地址写你的, 别写我的==

        git remote add origin git@gitee.com:webping/wuheping.git
        
      • remote 远程

      • add 添加

      • origin 源,这个名字可以自定义,叫什么无所谓。

      • 最后,是ssh地址(注意,不是https地址)

    • 推送命令git push -u origin master前提远程仓库上什么都没有

      • push 推送
      • origin 远程仓库地址,和上一条命令中的origin对应
      • master,表示推送本地的master分支
      • -u,首次推送需要 -u。(表示把本地的master和远程的master直接关联起来) ((全称叫upstream, 上传)
    • 假如远程仓库有东西, 先拉取下来和本地仓库的文件合并了 (rebase是把远程的直接合并到本地master里)

      • git pull origin master --rebase
      • 再执行, git push -u origin master
    • 如果首次使用SSH,会出现一个SSH警告,提示如下

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

        • 输入yes,回车

          image-20200712100146357

    • ==如果出现一句红色的警告提示:你没有权限请问远程仓库。==

      • 可能是私钥设置的不对,建议你重新配置私钥
      • 重新配置私钥后,需要将隐藏的.git文件删除(里面保存着第一次错误的公钥,所以需要手动删除)
      • 重新初始化一个.git文件,再次重新推送代码
    • 注意:一个远程仓库只能放一个本地仓库​

7. 拉取远程仓库代码到本地

  • 克隆远程仓库到本地

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

      • 开发项目的时候,可以先创建远程仓库,然后克隆到本地,再进行开发
      • 下载别人的代码的时候,可以选择克隆
      • 多人合作开发的时候,需要克隆合作伙伴的代码到本地
      • 直接执行克隆命令(不需要初始化 .git)
    • 通过SSH协议克隆
      git clone git@gitee.com:zxzllyj/sample-project.git
      

      以克隆仓库git@gitee.com:zxzllyj/sample-project.git为例(注:本处使用的是ssh地址,因为演示机已经配置好ssh公钥,故可以使用ssh地址,如果您没有配置公钥,请使用https地址)

      输入图片说明

      ==注:上图的方法虽然将仓库完整的拉取了下来,但是仅仅只会是显示默认分支,如果需要直接到指定的分支,可以在仓库地址后面加上分支名==

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

8. Git配置多个SSH-Key

  • 当有多个git账号时,比如:

    • a. 一个gitee,用于公司内部的工作开发; b. 一个github,用于自己进行一些开发活动;
  • 解决方法

    • 生成一个gitee公司用的SSH-Key

      $ ssh-keygen -t rsa -C 'xxxxx@company.com' -f ~/.ssh/gitee_id_rsa
      

      -f ~/.ssh/gitee_id_rsa 用来生成指定的文件名

    • 生成一个github用的SSH-Key

      $ ssh-keygen -t rsa -C 'xxxxx@qq.com' -f ~/.ssh/github_id_rsa
      
    • 在 ~/.ssh 目录下新建一个config文件,添加如下内容(其中Host和HostName填写git服务器的域名,IdentityFile指定私钥的路径)(如果两个都是gitee的ssh-key最前面的gitee会生效,哪个需要匹配就把哪个gitee-ssh-key配置代码放置最前面)

      # gitee
      Host gitee.com
      HostName gitee.com
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/gitee_id_rsa
      # github
      Host github.com
      HostName github.com
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/github_id_rsa
      
    • 用ssh命令分别测试

      $ ssh -T git@gitee.com
      $ ssh -T git@github.com
      

      这里以gitee为例,成功的话会返回下图内容

      img

9.小结

  1. 执行 git init 在项目文件夹中初始化一个==.git文件==,作用是用来管理这个项目文件夹

  2. 执行 git add . 暂存文件

  3. 执行 git commit -m ‘提交信息’ 保存在本地仓库

    • 如果没有配置公钥,需要先配置

    • 再执行下面两条命令,让本地仓库与远程仓库建立联系

      git remote add origin git@gitee.com:webping/wuheping.git
      git push -u origin master
      
  4. 如果远程仓库有代码或文件 需要 git pull 必须要先拉取

    • 拉取之后,如果有冲突,需要解决冲突,在必须 add commit -m ‘提交信息’一次
  5. 最后推送。git push 即可把自己写的代码推送到远程仓库中。

9. Github

你可以把远程仓库想象成一个 “文件管理服务器”,利用这个服务器可以与开发团队的其他成员进行数据交换。

Github同gitee的操作大同小异

9.1 注册

  1. 地址:github.com/ 访问github首页,点击 Sign up 连接。(注册)

    11

  2. 填写用户名、邮箱地址、GitHub登陆密码

    12

  3. 选择计划

    13

  4. 填写 GitHub 问题

    14

  5. 验证邮箱

    15

  6. GitHub 个人中心

    16

9.2 创建仓库

  1. 填写仓库基本信息

    17

  2. 将本地仓库推送到远程仓库

    18

9.3 SSH免密登陆

  1. 生成秘钥:ssh-keygen

  2. 秘钥存储目录:C:\Users\用户.ssh

  3. 公钥名称:id_rsa.pub

  4. 私钥名称:id_rsa

    23

9.4 ==剩下的操作在上面的码云(gitee)有介绍==

10. 图形化界面 (简略介绍)

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

10.1 vscode

  • 暂存文件(git add .)image-20200820113319928

  • 提交到本地仓库

    image-20200820113459276

  • 推送 (git push)image-20200820113858132

image-20200820113934460

image-20200820114245269

image-20200820114332437

11. Gitee Pages

gitee pages 是一个免费的静态网页托管服务

注意 仓库必须有index.html文件才能查看

11.1 使用前须知

1、==仓库必须有 index.html 才可以正常访问==

2、静态网页的样式可以自己写,也可以拿一些静态模版来修改,Pages服务本身不提供任何形式的模版,但我们后续会陆续增加例子,供大家参考使用。

image-20210124170658915

  • 访问生成的网站地址,即可以查看你部署的静态页面啦!

image-20210124171438725

详细说明:Gitee Pages