git从零开始的版本控制

一. 快速了解Git

1.1什么是git

Git是一个免费开源的分布式版本控制软件,用以快速高效的处理从小型到大型项目的版本控制
1.1.1 软件

git类似常见的软件如qq, 微信等软件,需要下载到电脑中进行使用

1.1.2 版本控制
1.1.2.1版本控制的发展史
  • 同一个文件创建多个版本,产生多个文件
    在这里插入图片描述

  • 本地存档,只有一个文件,但有多个版本
    在这里插入图片描述

  • 集中式的版本控制
    在这里插入图片描述

  • 分布式的版本控制
    在这里插入图片描述

1.1.2.2为什么做版本控制

通过版本控制可以很好的实现对版本之间的切换,如在线上出现问题时排查问题代码

1.1.3 分布式

分布式相对于集中式去除了中心化,在集中式中每个客户端只能拿到一个版本,而分布式则可以拿到多个甚至全部的版本

集中式只能将某次的修改提交到服务端,分布式可以在本地进行提交,然后将多个提交统一提交到远端

1.2 安装Git

git的安装主要有针对Linux, Win或者Mac系统,通过百度可以很简单的安装到本地,通过如下命令查看本地git版本

git --version

在这里插入图片描述

1.3 配置文件&初始化git

1.3.1 初始化git

在第一次运行git,我们主要设置用户名和邮箱,操作如下

git config --global user.name "kunmzhao"
git config --global user.email "xxxxx@qq.com"

# 查看配置是否成功
git config --list

![在这里插入图片描述](https://img-blog.csdnimg.cn/7693ca2991304199a7b0d1fe6b3a639f.png

1.3.2 配置文件

在git 中有2个权限文件

  1. 当前项目配置文件
    配置文件路径为: git 项目的中.git文件下的config文件
    在这里插入图片描述

    该配置只对当前项目生效

  2. 全局配置文件

    配置文件路径为 ~/.gitconfig
    在这里插入图片描述

    该配置对所有的项目生效

    在上述添加用户名和密码中的--global就是添加到全局配置文件中, 如果改成--loca就会添加到本项目配置文件中

    1.3.3 配置文件&应用场景

    在这里插入图片描述
    在这里插入图片描述

1.4 免密登陆

在后面的讲述中,我们可能需要将本地的代码推送到远端(例如GitHub),但是每次推送都会输入用户名和密码,这会很麻烦的

在这里插入图片描述

1.4.1 SSH密钥

通过这种方式就可以通过SSH的方式进行git远端的操作

  1. 在本地电脑生成公钥
    终端输入命令

    ssh-keygen
    
    # 然后一直点击回车键
    

在这里插入图片描述

  1. 找到生成的公钥
    在目录下找到该公钥
    在这里插入图片描述

    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDF6fXa8gnZN0SY+raGmQFhbEzvyMFqhkpe7JM6O11dZ/9H6W7d9sUphhPMRFEAart4BU70xZ0Ww6pHENhhZRWxmIa0od1uTtKC+bGKII2bcoJDfO8UQqUEeOjFsnlg1ulRKxM4l9L$0IVtKUIo0kKKgHw5SZbKHM8F+x1X1++KjuVepls5Cibu3Y9Cft1BnIabvVdTjUMllpG0w5FKS1eNFbtl77XFOMRB60IXz6BfnlJZkEVhDMpIpQd0kw3K5/yCnEF+eN6UDw1IPUrGivqUvQEeUMiXpbFUGJeZQxXIDIo13l+tUTWmqcQoxalC9WEW6DWbgmn1eytJFsrlPf1KNzNS6bFHx9WX06zYQz8pvau2Os6RbcyrTVNNe9dHXmtk9cAId7OsMhPsq+oWsPeoypIqpJGbFYuH3jjz/cJ45x6ehvFipXnRlmYewX1td+UDIavbMQ7LJx2mV2EuMsYGfx6w87cRDchxlLB1GUf9vBiVtzeTJ8056cL3+7YEF4ljU= kunmzhao@kunmzhaodeMacBook-Pro.local
    
  2. 将公钥拷贝到github中添加
    在这里插入图片描述

在这里插入图片描述

1.4.2 token

该方式针对https方式下载的代码,下载之后在推送代码的时候需要输入用户名和密码,并且使用用户密码是无法登陆的
在这里插入图片描述

  1. 打开GitHub,生成token
    在这里插入图片描述

  2. 将生成的token在登陆的时候作为密码进行验证

1.5 gitignore忽略文件

有时候我们不希望将项目中产生的中间文件进行git管理,可以通过.gitignore文件进行管控

  1. 在本地项目创建.gitignore文件

  2. 将需要忽略的文件写入该文件中即可

    a.h
    *.o
    file/
    !a.h
    
  3. 可以在在github中搜索gitignore,找到对应语言的gitignore

1.6 简单使用

  1. 初始化git库

    git init
    
  2. 克隆git仓库

    git clone git@github.com:kunmzhao/dbhot.git
    
  3. 在本地添加远程仓地址

    git remote add git@github.com:kunmzhao/dbhot.git
    
  4. 查看文件夹下所有文件的状态

    git status	
    
  5. 将新增文件或者修改的文件加入到git中进行管理

    git add 文件名
    git add . (管理 当前文件夹中未管理的所有文件)
    
  6. 将文件提交到本地

    git commit -m "描述性信息"
    

    tip:三种状态的变化

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kjYEchsZ-1667480811546)(../../python全栈/模块一py开发基础/Typora使用操作/1661738898653.png)]

  7. 查看提交记录

    # 查看所有的提交记录
    git log
    
    # 将提交记录简化为一行显示
    git log --oneline
    
    # 美化显示log 
    git log --pretty=oneline --graphy
    
    # 显示详情操作记录
    git reflog
    
  8. 查看修改

    # 查看工作区做的修改
    git diff
    
    # 查看暂存区相对版本区做的修改
    git diff --cached
    
    # 查看两个版本之间的修改
    git diff commitID1 commitID2
    

二. Git的本地操作

2.1 Git的三大区域

  • 工作区:程序员工作的目录
  • 暂存区:缓存区
  • 版本区:版本控制

2.2 回滚

  1. 工作区回滚

    git checkout x.py
    git clean -df
    ```![<img src="picture/image-20220503193117913.png" alt="image-20220503193117913" style="zoom:50%;" />](https://img-blog.csdnimg.cn/e4366903356a440595a9be5b58769ac2.png)
    
    
  2. 暂存区回滚
    ```shell
    git reset HEAD x.py

    
    
  3. 版本区回滚

    1. 版本区回滚到暂存区

    2. 版本区回滚到工作区(红色)

    3. 版本区回滚到工作区(透明色)

      git reflog --(查看回滚的版本号)
      git reset --hard (回滚的版本号) --> 回滚到之前回滚的状态
      

2.3 分支

分支中每一个节点保留着相对上一个节点改变的内容,分支在git中是非常重要的,环境隔离使得多人协同开发称为可能

  1. 查看分支

    # 查看本地分支
    git branch --list
    
    # 查看包括远程的所有分支
    git branch --all
    
    # 产看分支包括跟踪分支
    git branch -vv
    

  2. 创建分支

    git branch 分支名
    

  3. 切换分支

    git checkout 分支名
    
    # 在创建分支的同时切换分支
    git checkout -b 分支名
    

  4. 删除分支

    # 删除分支,该分支没有为合并的提交
    git branch -d 分支名
    
    # 删除分支,有未合并的分支也会删除
    git branch -D 分支名
    
    注意:删除一个分支的时候,必须切换到另外一个分支上
    

  5. 合并分支

    # 将分支合并到当前分支
    git merge 分支名
    
    注意:先切换到要合并到的分支上去,再合并指定分支
    

2.4 冲突

冲突是在两个分支(要合并的)对同一个文件的同一行内容作了修改而产生的

解决办法如下:

  1. 找到产生冲突的文件中的冲突代码
  2. 决定保留哪一个分支的代码行,删除其他冲突代码
  3. 重新合并代码

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

2.4.1 快速解决冲突

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fuK4cwoL-1667480811548)(../../python全栈/模块一py开发基础/Typora使用操作/1661782447069.png)]

2.5 变基

rebase可以将git的提交记录变得简洁

  1. 合并多个提交记录

    现状:希望将前三条记录合并为一条

    git rebase -i HEAD~3
    

在这里插入图片描述

将上图修改为下图:
在这里插入图片描述

然后重新添加修改记录
在这里插入图片描述

最后结果如下图:
在这里插入图片描述

  1. 分支合并

我们在合并分支时log会出现如下情况

如果在合并分支的时候希望主分支上仍是一条直线,可以用rebase代替merge,如下
在这里插入图片描述

通过rebase可以节省一次提交记录

3.如果忘记提交代代码

注意:在rebase中也是可能产生冲突的,解决方法如上所述

三. GitHub远程仓

远程仓可以理解为某一个存放代码的服务器,市面上常见的有GitHub和GitLab等

我们以GitHub为例,学习一下自己创建远程仓

  1. 注册账号
    在这里插入图片描述

  2. 创建仓库
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 推送本地代码到远程仓库

    假如你本地已经有了一些代码,你希望上传到远程仓库

    1. 初始化代码目录:在本地代码目录的最外层执行

      git init
      
    2. 配置git

      # 创建用户名和邮箱
      git config --global user.name "xxx"
      git config --global user.email "xxx"
      
      # 添加远程仓
      git remote add origin git@github.com:kunmzhao/mytest.git
      
      
    3. 将本地代码推送到远程仓库

      git push origin 分支名
      
      # 完整命令
      # 通常省略remote branchName,与local branchName 同名
      # remoteName为我们一开始为远程仓配置的名字origin
      git push <remoteName> <local branchName>:<remote branchName>
      

在这里插入图片描述

  1. 下载代码到本地
    假如你希望从远程克隆代码

    1. 本地创建文件夹并初始化

      git init
      
    2. 克隆代码

      git clone git@github.com:kunmzhao/mytest.git
      
    3. 配置git

      # 创建用户名和邮箱
      git config --global user.name "xxx"
      git config --global user.email "xxx"
      
      # 添加远程仓
      git remote add origin git@github.com:kunmzhao/mytest.git
      

四. Git远程操作

  1. 推送代码

    # 如果远程分支不存在就创建
    git push 远程仓名字(origin) 本地分支名字:远程分支名字
    
    # 如果希望远程分支和本地分支同名,命令如下
    git push 远程仓名字(origin) 本地分支名字
    
    # 如果希望将远程仓可本地仓建立联系,使得以后推送代码和拉去代码更简单
    git branch -u 远端分支名字
    
    # 可看跟踪分支情况
    git branch -vv
    
    # 以后将本地分支推动到远端,命令如下
    git push
    
    # 如果你想在本地创建一个分支跟踪远端的分支,命令如下
    git checkout -b 分支名 远端分支名字
    
  2. 拉取代码

    # 方式一:下载远程代码但不合并版本区的代码
    
    # 将所有的远端分支进行更新
    git fetch
    
    # 将远端分支和本地分支合并
    git merge 
    
    
    # 方式二: 下载远程代码并合并版本区代码
    git pull 
    

    在这里插入图片描述

五. 提交开源项目代码

  1. 在github上找到开源项目

  2. fork到自己账户下
    在这里插入图片描述

  3. 在本地进行操作

  4. Pull request到项目上去
    在这里插入图片描述

六. github任务管理相关

1.issues:文档以及任务管理

2.wiki:项目文档

七. 补充

  1. 追溯历史

    # 文件的创建日期,创建人等信息
    git blame 文件名
    
    # 追溯某n1-n2之间的代码
    git blame -L n1,n2 文件名
    

在这里插入图片描述

  1. 堆栈保存

    # 将本分支未提交的内容先缓存起来,后续再次恢复,常用在需要切换分支时使用
    
    # 保存
    git stash
    
    # 查看保存
    git stash list
    
    # 恢复缓存
    git stash pop
    

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值