Git学习

这里还有一个很好的总结网站:https://mp.weixin.qq.com/s/Q_O0ey4C9tryPZaZeJocbA

概述

  1. git在实际开发中的运用场景非常多,比如:备份,代码还原,协同开发,追溯问题代码的编写人和时间。

==版本控制器的方式==

a.集中式版本控制工具,比如:svn,cvs

b.分布式版本控制工具,比如:git

二者的差别很大,集中式中,版本库是存放在中央服务器中的,需要的代码都是提交到中央服务器或从中央服务器下载;分布式中则没有中央服务器,会有一个共享服务器,每台电脑都有自己的本地仓库存放着自己的一个完整的版本库。

git的配置

==设置用户信息==

当不跟设置信息的名称时就是查询用户的信息

给常用命令设置一个别名

#创建一个.bashrc文件,在里面设置别名
touch ~/.bashrc
vim .bashrc
source ~/.bashrc

获取本地仓库

  1. 新建一个目录作为本地仓库,这里直接在桌面建一个git_test目录
  2. 用 git init 初始化本地仓库

​ 能看到.git文件就成功了

git的常用命令

Git工作目录下对于文件的修改会存在几个状态(除了.git目录的都叫工作目录)

接下来新建一个file01.txt文件来进行测试命令,用touch指令

#查看git状态
git status
#添加到缓存区
git add file01.txt #也可以用.通配符,表示添加所有
#提交到仓库
git commit -m "注释"
#查看历史日志
git log

git log [option]还有更多的参数,这里详细列出来

  • –all 显示所有分支
  • –pretty=oneline 将提交信息显示为一行
  • –abbrev-commit 使得输出的commitid更简短
  • –graph 以图的形式显示

==版本回退==

git reset --hard commitID
#查看已经删除的记录
git reflog #这个可以查看所有操作记录

commitID可以用git log查看

==添加文件至忽略==

有些文件我们不需要git管理,可以将他们添加到gitignore文件中即可

touch .gitignore

一些示例

git分支

几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来, 以免影响开发主线。

  • 常用分支相关命令

    • 查看本地分支

      git branch

    • 创建本地分支

      git branch 分支名

    • 切换分支

      git checkout 分支名

      git checkout -b 分支名 (直接切换到一个不存在的分支并创建该分支)

    • 合并分支

      一个分支上的提交可以合并到另一个分支

      git merge 分支名称

      比如dev分支要合并到master需要先切换到master主线,再get merge dev

    • 删除分支

      不能删除当前分支,只能删除其他分支

      git branch -d b1 删除分支时,需要做各种检查

      git branch -D b1 不做任何检查,强制删除

git远程仓库

这是一个总结的工作流程图:image-20240123132413459

使用ssh绑定gitee

  1. 用git来绑定gitee:

    //生成ssh公钥,可以使用-f参数指定生成的文件名,比如:-f "id_rsa_gitee"
    ssh-keygen -t rsa//生成的ssh密钥会默认在~/.ssh下面,如果生成过了也会直接覆盖,所以有多个密钥时要记得备份(在Windows的c盘用户目录下可以找到)
  2. Gitee设置公钥

    将~/.ssh下的id_rsa.pub公钥复制到下面的地方

    image-20240125154416297

  3. 绑定之后可以去验证ssh能否连接到gitee,这里选择用在~/.ssh下新建一个config文件来配置,这样可以连接gitee也行、github也行,参考这篇文章:https://blog.csdn.net/weixin_40402743/article/details/124484633

    image-20240125170039569

    config文件中的配置如下,我配github的时候配置了邮箱,gitee则没有

    image-20240125170137353

    #github
    Host github.com
    User <生成密钥时指定的邮箱邮箱>
    Hostname ssh.github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_github
    Port 443

    #gitee
    Host gitee.com
    HostName gitee.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_gitee

    使用ssh -T git@gitee.com验证image-20240125170434757

远程仓库操作

添加远程仓库

git remote add <起的名字> <仓库地址>
//git remote 可以查看当前的远程仓库

image-20240125174304783

推送远程仓库

git push <自己命名的名称> <分支>

image-20240125180131766

这是远程推送的完整指令

git push [-f] [--set-upstream] [远端名称 [本地分支名]:[远端分支名]]#如果本地和远端分支名一致就可以省略一个,像上面一样
  • -f表示强制推送,和远端代码修改同一块地方时可能会出现冲突。

  • –set-upstream:推送到远端的同时并且建立和远端分支的关联关系,这样当当前分支已经和远端分支关联时,则可以省略分支名和远端名image-20240125182248016

    image-20240125183254456

克隆远程仓库

git clone <仓库路径> [本地目录]

如果没有指定目录的话,就会创建一个默认目录,比如

git@gitee.com:ljc0033/git_test.git

就会取git_test作为目录名

抓取和拉取

  • 抓取指令:git fetch [remote name] [branch name]

    抓取就是将仓库里的更新都抓取到本地,不会进行合并

    如果不指定远端名称和分支名,则抓取所有分支

  • 拉取命令:git pull [remote name] [branch name]

    拉取就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge

    如果不指定远端名称和分支名,则抓取所有并更新当前分支

image-20240125213127428

这里可以看到fetch之后的分支并没有合并到当前的master,接下来再进行 git merge origin/masterimage-20240125213243273

可以看到成功合并了(这里可以写上分支名),git pull就相当于合并了这两步

解决冲突

当A和B修改同一个文件时会出现冲突,这里模拟一下同时修改file01.txt文件,其中一个先提交image-20240125214924391

image-20240125215448663

这里可以看到右边想要进行合并出现了冲突,因为修改了同一块地方,再看一下file01.txt的内容image-20240125215616774

上面的是我们当前分支,下面的是远端分支,我们只需要在本地把他修改我们想要的样子然后提交再合并就可以了,比如这样image-20240125215801079

image-20240125215928798

git绑定GitHub账号

  1. git config --global --list  //查看自己的用户名和邮箱,注意要和github保持一致
    //如果不一致则自己去设置
    

    2. ```
    ssh-keygen -t rsa -C "自己的邮箱"//这里生成ssh的密钥,会默认在~/.ssh目录下面
    可以看到有下列文件:![image-20231103174934422](http://cdn.clown2024.cn/202407151440117.png)
  2. 回到github仓库添加密钥

image-20231103175102389

然后复制.ssh下面的.pub公钥到下面的key中image-20231103175214763

  1. ssh -T git@github.com //测试是否连通
    

    出现下面的结果即代表成功image-20231103175607799