git

工作流

首先我们看一下git版本控制的基本流程:

image-20240728180808754

一般我们会把项目放到远程仓库(github,gitee等)里,所有人都以这个远程仓库的文件作为最新版本(正本),。个人都有自己的工作区,这个工作区也就是自己本地电脑里的一个文件夹,每个人都可以用 clone 把最新版本的文件复制到本地,在自己电脑里操作文件就不会影响远程仓库,而且每个人都可以负责不同的板块。假设现在我们更新了一些文件想要提交到远程仓库,比如新增的4个文件里,我们只有2个文件需要添加到远程仓库,这个时候就可以把这2个文件添加到暂存区,也就是 add 。如果暂存区我们也觉得没有问题了,可以提交到本地仓库,也就是 commit ,本地仓库其实也就是本地版本区。如果本地仓库可以去更新远程仓库了,我们就可以用 push 把内容推过去。这里有几个状态要特别注意,如果文件还在工作区里,那文件就是 Untracked -未追踪状态,也可以用Unstage表示,已追踪状态用stage表示。如果远程仓库有更新内容,我们可以使用 pull 来进行更新,pull会直接更新到工作区,把你工作区的内容更新掉。所以,我们可以用 fetch 先更新到本地版本库,接着用 diff 对比区别,没问题再合并过来。

image-20240728183348117

常用命令

  • git config 配置基本信息
    • git config --global user.name 用户名
    • git config --global user.email 邮箱
    • git config --global init.defaultBranch main
      • 将初始化分支改为main

新建并进入一个空白文件夹作为工作区

  • git init 初始化

    • 输入后会发现多了一个 .git 隐藏文件夹

    • git所有记录都会在这个文件夹里

    • 一般来说我们不需要去研究里面文件的具体作用

    • 初始化后会处于 master/main 主分支

      image-20240728184457819

现在我们随便新建一个文件,随便写点内容

  • git status 查看文件状态

    image-20240728184827337
  • git add 添加文件到缓存区

    • git add 文件名
      • 添加指定文件
    • git add .
      • 添加所有未追踪文件
image-20240728185217117
  • git commit 提交

    • git commit
      • 进入vim编辑器,输入提交信息
    • git commit -m “信息”
      • 可以在信息中加入 #数字 用来指定解决的issue
    image-20240728185633825
  • git log 查看版本(按q退出)

image-20240728185727179

我们可以使用 .gitingore 文件忽略我们不想上传的文件,详情参考我的另一篇博客。

  • git branch 创建分支

    • git branch 分支名
      • 创建分支
    • git branch -d 分支名
      • 删除分支(会提示需要合并)
    • git branch -D 分支名
      • 强制删除
    • git branch
      • 查看所有分支
    image-20240728190928401
  • git checkout 切换分支

    • git checkout 分支名/commit的id
    image-20240728191516204
    • git checkout -b 分支名
      • 创建并切换分支
  • git merge 合并分支

    • git merge 分支名
      • 把分支名合并到当前分支
    image-20240728192359468

如果我们2个分支都修改了内容,合并时就会发生冲突

image-20240728193118707

我们可以进入文件进行修改,手动合并就行了。

image-20240728193331755image-20240728193352161

记得修改完后提交 git commit -am "deal confict"

接下来去github创建一个项目

image-20240728193854344

image-20240728212452214

这里的 git branch -M master 是把分支强制改为master,-m没有强制执行

  • git remote 远程仓库连接

    • git remote add origin 远程仓库地址
      • origin:远程仓库别名,可以自己随便起
      • 添加远程仓库地址
    • git remote set-url origin 新远程仓库地址
      • 修改远程仓库地址
    • git remote -v
      • 可以不加-v,-v可以看到远程仓库地址
      • 查看远程仓库地址
    image-20240728220453619
  • git push 上传到远程仓库

    • git push -u origin master
      • -u:指定默认同步远程仓库地址和分支名,以后可以直接使用git push
      • 会提示我们要输入用户名密码,如果我们直接输入密码,会出现下面的错误,这是因为github在2021年已经不支持直接通过账号密码的形式进行push代码了,需要我们生成个人访问token

    image-20240728213659784

image-20240728214040889

找到Developer Settings

image-20240728214146123 image-20240728214628578

输入一个名字,把所有权限勾选上点击创建。

生成的token只会出现一次,记得复制妥善保存

此时再次尝试push,密码使用刚才生成的token。

image-20240728215556010

我们尝试在github对文件进行更新:

image-20240728220023556
  • git fetch 拉到本地版本库
image-20240728220747317
  • git diff 比较远程和本地版本库
    • git diff 远程仓库名(eg:origin/master)
image-20240728220559239
  • git pull 把远程仓库内容放工作区

    • git pull 远程仓库别名 本地分支

      image-20240728220720400
    • git pull --rebase 远程仓库别名 本地分支

      • 它会把本地commit变成最新的,远程的变成老的那条

当你再次push代码时,你仍然需要输入用户名和密码,我们需要修改远程仓库地址为ssh地址

image-20240728222829553

这样就不需要输入密码了。

image-20240728222729978
  • git switch -c 分支名
    • 创建并切换到该分支
  • git tag 标签
    • git tag
      • 查看标签
    • git tag -a 版本号 -m “信息”
      • -a:annotation,注解
      • eg:git tag -a v1.0.0 -m “v1.0.0”
      • 可以使用git push origin v1.0.0 把标签推送到远程仓库