Files
AI0814_jiaoan_public/w1_d1/git.md
T
2026-09-23 21:27:55 +08:00

14 KiB
Raw Blame History

git介绍

  • 思考1:任何项目,是否有多个版本?如果是,每个版本的代码是否需要保存?
    • 有多个版本,每个版本的代码都要保存。如果没有其他工具可能就是一个文件夹一个版本,那样版本一多就乱了
  • 思考2:公司里的项目一般是多人开发的,要不要共享代码?
    • 要共享代码,但是传统共享代码,就是微信传递、u盘传递等
  • 以上问题,都可以由git这个工具解决
  • git是什么?
    • 一款分布式的版本管理、多人协作工具
  • 集中式版本管理
    • 一个团队的代码,全部集中存到一个服务器上。所以如果这个服务器挂,版本都没了
  • 分布式版本管理
    • 一个团队的代码,整体是存到服务器上的,但是当某个人下载这份代码,会相当于下载了全部的副本,这就叫分布式。好处:数据不易丢失
  • 总结:git是什么?
    • 就是一款分布式的版本管理、多人协作的工具
    • 作用1:控制和记录版本变化
    • 作用2:方便多人协作共享代码
    • .......

git下载与安装

官网

  • 下载完了后就建议下一步下一步直到完成,毛都不要改
  • 建议:开发软件就建议装在C盘
  • 如何判断安装成功?
    • windows系统可以:右键看有没有 git bash here,有就代表成功
    • 或者windows和mac都可以在终端(cmd、小黑窗),输入git按回车,如果出现一大坨英文,就代表成功

git 配置用户名与邮箱

  • 作用:用来标识自己是谁

  • 配置方法:

    • 打开小黑窗
      • 方法1:右键开始菜单,然后点运行,然后输入cmd按回车
        • 快捷键winows键+r再输入cmd回车
      • 方法2:
        • 随便打开一个文件夹,在地址栏上输入cmd按回车
      • mac直接搜“终端”两个字
  • 命令如下

# git config  user.name 你的目标用户名
# git config  user.email 你的目标邮箱名

# 使用--global参数,配置全局的用户名和邮箱,只需要配置一次即可
# 用户名有意义即可
# 邮箱要真实可用
git config  --global user.name mm
git config  --global user.email mm@mmm.com

# 查看配置信息
git config --list

# 取消配置 - 把它们从配置文件里删掉 - 一般不用
git config --unset --global user.name
git config --unset --global user.email 
  • 总结:
    • 把gitee上的用户名和邮箱配置到git上
    • 要配置几次?
      • 1次
    • 有什么用?
      • 可以给服务器识别你的身份
    • 命令为
git config --global user.name  用户名
git config --global user.email 邮箱

初始化仓库

  • git作用:可以做版本管理,相当于游戏里的存档
  • 并不是说你电脑上安装了git,那么所有的项目都被管理了
  • 而是你要给这个项目做初始化仓库的操作,才代表这个项目被git管理了
  • 如果希望一个项目被git要用 git init初始化这个项目
  • 步骤:
    • 来到这个项目文件夹,右键git bash here会弹出一个专门给git用的小黑窗,而且直接就在这个项目的路径上,输入
git init
- 敲完会在这个项目文件夹里多一个 `.git`的隐藏文件夹,所以如果以后在项目中看到有这个文件夹,代表这个项目已经被`git`管理,就不用再初始化了
  • 注意:

    .git文件夹不能删了,删了就相当于所有的版本都没了,只留下当前代码

    • 有些人即使初始化了也看不到这个文件夹,是因为系统设置了隐藏文件夹不可见,所以可以通过下图设置

      image-20230217113139174

    • 请问一个项目搞一次,而且这个项目如果已经有了,就不搞

git - 记录改动

image-20230216213606771

  • 作用:相当于就是产生存档
  • git三大区域:
    • 工作区:就是指项目代码
    • 暂存区和仓库区:对我们而言是不可见的
  • 如果你工作区改动了代码,想产生一个存档,就要先把改动加到暂存区,再加到仓库区
  • 先改代码,然后敲命令
# 查看当前状态
git status

# 把当前改动到的所有文件都加到暂存区
git add .
# 添加某个文件到暂存区 -- 用的少
git add 文件名

# 把暂存区的内容提交到仓库区
git commit -m'本次操作的说明文字'
  • 如果仓库此时没有任何新的改动,git status会出现干净的提示

    image-20230217114048810

git - 快速提交的说明

git commit -a -m '提交说明'
  • 仅能用于本就存在于仓库的文件
  • 仓库中新建的文件,还是得先加到暂存区,再提交到仓库区

git - 修改已提交的说明文字

  • 如果刚刚提交的文字不小心写错了,可以修改
git commit --amend
  • 此时会进入到编辑模式,默认的编辑器非常难用
    • 进入后你需要输入i,代表进入修改,然后通过键盘上下左右改动光标位置,再把你需要的文字删掉或改掉
    • 改完后,还得按一下esc键,然后英文状态下输入 :wq按回车才代表修改完成
    • git config --global core.editor "notepad"
      

git - 查看记录

# 查看详细记录
git log

# 一行显示每条记录
git log --oneline

git - 回滚记录

  • 作用:可以把代码恢复到某个记录的状态
  • 命令
git reset --hard 记录的hash值(记录的id)
- 如何获取记录的hash值?
git log
# 用的多
git log --oneline
  • 注意:
    • 回滚到某个记录后,你再git log只能看到当前记录和它之前的,后面的看不到
    • 要想看到全部操作记录,用
git reflog
  • 练习:
    • 要求产生至少3个记录
    • 能自由切换3个记录的代码
    • 最后一次一定要回滚到最新记录

git - 配置被git忽略的文件

  • 有些文件可能不需要被git管理,例如一些自己手写的笔记,密码等,那就可以配置忽略文件
  • 需要在仓库根目录,新建 .gitignore文件,在这个文件里写需要被忽略的文件,例
密码.md
情书.md
小电影
  • 如果这些文件被git忽略,将不会被提交,也不受git记录变化而变化

git - 分支的概念

  • 所谓分支,就是指把当前的代码克隆一份
  • 这样做的好处是:可以按员工开分支代码,一人负责一个分支,好处是方便管理,以及某一个分支有问题绝对不影响其他分支
  • git初始化后,默认就会有一个分支叫master,我们也称之为主分支
  • 开发中有个规范:主分支上不直接进行开发,它里面只保留经过测试的最稳定的版本代码,开发不会直接在这个分支上进行
  • 所以还会在主分支的基础上克隆出一份代码(开一个新的分支),分支名叫develop或者dev,代表是专门用来开发的分支
  • 再然后在 develop基础上又开多个分支,不同的人负责不同的分支,他们写完代码,又各自合并到develop分支,然后经过大量测试和试运行发现很稳定,就合并到 master产生一个稳定的版本

image-20230217162251228

git - 分支操作

  • 命令如下
# 查看当前所有分支
git branch
# 新建分支
git branch 分支名
# 切换分支
git checkout 分支名

# 新建分支并切换过去
git checkout -b 分支名
  • 合并分支一定要小心(要找对分支、确保写的代码都已经提交了),再切换到想合并的目标分支
    • 比如我想合并到develop,我就要先切换到develop
git checkout develop
  • 合并语法
git merge 分支名
# 例如:当前是develop分支,然后你写git merge zs,意思就是把zs分支的代码合并到develop里面
git merge zs
  • 练习要求:
    • 默认有master分支,需要新建develop分支,再然后在develop基础上创建dy、ls
    • dy写dy,ls写ls的代码(新建dy.html,ls.html)
    • 每个分支写完了先提交到当前分支
    • 然后合并到develop
    • 等develop有所有代码了,再合并到master

git - 分支合并冲突

  • 工作中必须学会如何解决冲突

img

  • 当不同分支负责人员改动到同一个文件,合并时就会产生冲突

  • 如果冲突了,在vscode中将看到如下界面

  • 三个选项具体怎么选要看需求

    • 例如1:当前的有bug,所以领导指派李四去修复bug,然后合并过来,肯定是保留李四,也就是保留合并过来的(点第二个按钮)
    • 例如2: 如果当前分支代码比较多,还包含了要合并过来的分支的代码,就选第一个
    • 例如3:如果两段代码分别是完成不同的功能,而且这两个功能都要,就选第三个都保留

git - 删除分支

git branch -d 分支名
# 强行删
git branch -D 分支名
  • 如果你要删某个分支,你要确保不在这个分支上,才可以删
  • 如果被删的分支有新的记录,但是还没有合并,那么也删不掉,用git branch -D 分支名

远程仓库 - 建库、删库

  • 建库

image-20230218094506675

  • 删库

    image-20230218094553000

    image-20230218094630995

远程仓库 - 添加团队成员

image-20230218095123406

远程仓库 - 推送

  • 让本地仓库跟远程仓库建立链接
git remote add 起一个远程仓库名字 仓库地址
git remote add origin https://gitee.com/xpzll/viewdemo95.git
  • 推送代码到远程仓库
git push -u origin "master"
  • 以上两段命令,gitee上可以复制
  • 第一次推送会需要登录,但是这个登录只要成功一次,后面都不用登录

image-20230218095746921

远程仓库 - 开源

image-20230218095939726

远程仓库 - 多远程仓库连接

# 建立链接
git remote add origin 仓库地址
  • remote是远程的意思
  • add是添加的意思
  • origin只是给这个远程仓库的连接起了一个名字叫origin
# 把本地仓库推送到 origin 连接的远程仓库,并且也把远程仓库分支叫为master
git push -u origin "master"
  • 所以如果你一个本地仓库,要推送多个远程仓库,要建立新的连接,而新的连接名字不能重复
# 也就是说连接到这个新仓库的别名叫xx
git remote add xx 新仓库地址

## 意思是把本地仓库推送到xx这个连接的远程仓库
git push -u xx "master"

远程仓库 - 删除连接

  • 工作中一般一个本地仓库只连接一个远程仓库
  • 问题来了如果之前我在本地建立了一个连接,而且连接名字叫origin,后面再建立连接除非改名字,不然还叫origin会报错
  • 但是我就是想用origin,就把之前的origin删掉
git remote remove origin

远程仓库 - 克隆

  • 作用:把远程仓库的代码克隆下来
# 要么这个仓库是开源,要么你是这个仓库的成员
git clone 仓库地址

远程仓库 - 拉取

  • 作用:可以把远程仓库最新的代码拉取下来
git pull

解决推送冲突

img

  • 解决办法:
    • 先git pull拉取最新代码
    • 再git push
  • 注意:
    • 为什么以后只要写 git push,因为完整写法是之前空仓库用一次就够了,后面都不是空仓库,直接push

windows的凭据管理器

  • 它把密码保存到windows的凭据管理器里了
  • 如果你不想用了,就去里面删除,如果删除了下次还得输入
  • 最多就是去里面修改它,因为我可能把gitee账号密码给改了,那这里也得修改
  • 或者如果公司刚好也是用gitee,而且公司没给你发电脑,你用的还是自己的电脑,而且还要满足公司的gitee没用你的邮箱,而是直接给你指派了邮箱,这时候就去要修改

SSH私钥与公钥方式

  • 因为有人的电脑因为系统原因是没有凭据管理的,那就意味着每次都要输入账号和密码

  • 所以还有一种方式叫使用私钥配合公钥的形式来免登录

    image-20230218120707585

  • 在任意小黑窗里输入如下命令

ssh-keygen -t ed25519 -C "你的邮箱地址" 
  • 以后去到公司,公司负责人会问你要你的邮箱,或者问你要公钥
  • 如果是要邮箱,就要用https,然后输入账号和密码来登录
  • 如果问你要公钥,你就在电脑上生成公钥和私钥,再把公钥部分的内容发给负责人
  • 公钥文件以 .pub结尾,去~/.ssh文件夹找文件
  • ~代表自己电脑的个人文件夹
  • 例如: C:\Users\你电脑的用户名\.ssh
  • 如果是账号密码登录用 https的仓库地址
  • 如果是公钥用ssh的仓库地址