Git 学习笔记--入门篇

一、Git简介

	Git 是一个免费的、开源的 ⭐分布式版本控制工具⭐

1、版本控制

1、概述

	版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
	版本控制其实最重要的是可以记录文件修改历史纪录,从而让用户能够查看历史版本,方便版本切换;

2、意义

	个人开发过渡到团队开发

3、分类

1、集中式版本控制

CVS、SVN(Subversion)、Vss…

        集中化的版本控制系统有一个单一的集中管理服务器,保存所有的文件修订版本,协同工作的人都通过客户端连到这台服务器,取出最新的文件或者提交更新。

  • 优点:便于管理,集中化管理;
  • 缺点:过于集中,风险大,服务器宕机,无法协同工作;
2、分布式版本控制

        Git、Mercurial、Bazaar、Darcs…

        分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码的仓库完整的镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复,每个客户端的每一次文件提取操作,都是一次对整个文件仓库的完整备份;

分布式版本控制系统解决了集中式版本控制系统的缺陷:

  1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
  2. 每个客户端保存的是完整的项目(包含历史记录,更加安全)

2、Git 工作机制

        分为工作区 git add暂存区git commit 提交至 本地库 git push 推送至 远程库

3、Git 和代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,简称为 远程库

  1. 局域网
    • GitLab
  2. 互联网
    • GitHub(外网)
    • Gitee 码云(国内网站)

二、Git 安装

官网:http://git-scm.com/

        下载最新版本即可,安装步骤基本无脑下一步,git bash here 选项勾上最好,安装路径尽量不要有中文,示例路径 D:\Develop\Git

三、Git 常用命令

命令名称命令描述
git config --global user.name 用户名设置用户签名
git config --global user.email 邮箱设置用户签名
git init初始化本地库
git status查看本地库状态
git add 文件名添加到暂存区
git commit -m "日志信息" 文件名提交到本地库
git reflog查看历史纪录
git reset --hard 版本号版本喘嗽

1、快速入门

1、git config

设置用户签名

  • git config --global user.name 用户名
  • git config --global user.email 邮箱
    image-20211028200057223
  • 签名的作用是区分不同操作者的身份,用户的签名信息在每一个版本的提交信息中能够看到,以此来确认提交者的身份;

        注意: 这里设置的用户签名与后面登录 Github 等远程仓库的账号没有任何关系;

  • 可以通过git config --get user.name/user.email 查看相关的用户签名信息,git 并不会对用户签名(例如邮箱真实性)的真实性进行鉴别,即只要设置了即可;
    image-20211028200137260

2、git init

  • 初始化本地仓库:git init
    image-20211028201944803

3、git status

  • 查看当前状态:git status
    image-20211028201903535
  • 创建一些新的文件,并再次查看本地仓库状态
    image-20211028202406584

4、git add

  • 将文件添加至暂存区:git add file.txt,可以使用 通配符 . 添加所有新增的文件;
    image-20211028202638212
  • 查看本地仓库状态image-20211028202820715

5、git rm

  • 若不想将此文件推送至本地仓库,可以将此文件从暂存区移除 git rm --cached file.txt注意: 这里只是将文件从暂存区移除,文件仍旧存在在仓库目录中并没有被删除;
    image-20211028203057197
  • 查看本地仓库的状态
    image-20211028203127619
    方便后续演示再次将 file.txt 添加至 暂存区;

6、git commit

  • 将文件提交至本地库:git commit -m "log message" file.txt
    image-20211028203519863
    这里的 [master (root-commit) fb716be] 就是提交的版本号:fb716be
  • 查看本地仓库状态
    image-20211028203831022

7、git reflog

  • 查看版本信息:git reflog
    image-20211028203946735

8、git log

  • 查看版本详细信息:git log
    image-20211028204054932
    可以在这里看到用户签名:Author: Xbai-hang <Xbai-hang@qq.com>
  • 修改仓库的 file.txt 文件,之后查看仓库状态;
    image-20211028204335845
  • 之后再次添加至暂存区、提交到本地库查看日志;
    image-20211028204718106image-20211028204708719可以看到此时 Head 指针指向的版本号为最新版:022b85c

9、git reset

  • 版本穿梭,切换回第一个版本:git reset --hard fb176be
    image-20211028205328195
  • 使用命令行命令 cat 、head、tail 等查看此文件的内容,看是否发生了改变(图片略)
  • 查看版本信息
    image-20211028205744932
  • 我们可以在 .git 文件夹下找到 HEAD 文件,发现其内容是:ref: refs/heads/master,之后我们打开文件 refs/heads/master,查看其内容为:fb176bebc8c2d1ac107bd334728a6ac0d121a44e,保存的正是当前的版本号;

        可以初步了解到,git 原理就是通过指针来完成版本控制HEAD 指针指向当前分支 mastermaster指针指向当前仓库版本号

2、分支概述

        在版本控制过程中,同时推进多个任务,我们可以为每个任务创建单独的分支;
        使用分支意味着程序员可以把自己的工作从开发主线上分离出来,开发自己分支时不会影响主线分支的运行,可以简单理解为分支就是副本,一个分支就是一个单独的副本(分支底层其实也是指针的引用)

使用分支的好处(优点):

  • 同时并行推进多个功能的开发,提高开发效率
  • 分支开发过程中,某个分支开发失败,不会影响到其他分支。失败的分支删除重新开始即可

3、分支命令

命令名称命令描述
git branch 分支名创建分支
git branch -v查看分支
git checkout 分支名切换分支
git merge 分支名把指定的分支合并到当前分支上

1、git branch

  1. 首先查看分支:git branch -v
    image-20211028211708559
    注意-v 属性项可以省略,省略后将只会显示所有分支名以及当前分支,不会显示版本号以及版本信息;
  2. 创建新的分支:git branch hot-fix无任何回应,对于 git 来说,无任何回应就是最好的回应,代表命令执行成功了;
  3. 再次查看分支:git branch
    image-20211028211931553
    使用 -v 属性项继续查看git branch -vimage-20211028211958081
            可以看到,从当前分支创建的新的分支与当前分支的版本号,版本信息等等完全一致,相当于是主分支(master)的一个副本;

2、git checkout

  • 切换分支到新建的 hot-fix 分支:git checkout hot-fix
    image-20211028212151018

  • 查看分支:git branch -v
    image-20211028212331998
            可以发现,当前分支(hot-fix)前面多了一个 ⭐,并且命令行括号内也发生了改变 master ---> hot-fix

  • 修改当前分支下的 file.txt 文件并提交(add、commit)
    image-20211028212653567

3、git merge 分支合并

        先切换至主分支(git checkout master),然后通过 git merge hot-fixhot-fix 分支合并至主分支;

1、正常合并

image-20211028214003306

2、冲突合并

        产生冲突原因:合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改,Git 无法替我们决定使用哪一个,必须人为决定新代码的内容;

  • 修改 master 分支下的 file.txt 文件内容,并切换分支至 hot-fix ,之后再修改此分支下的 file.txt 文件的内容;
  • 此时切换回主分支并且合并 hot-fix 分支
    image-20211028220249283
  • 此时查看本地仓库状态
    image-20211028220500902
  • 打开 file.txt 文件可以发现 git 已经为我们标注好了冲突的地方;
    image-20211028220608775
  1. <<<<<<< HEAD======= 之间的代码是当前分支对 file.txt 文件修改的内容;
  2. =======>>>>>>> hot-fix 之间的代码是被合并的分支(hot-fix)对 file.txt 文件修改的内容;
3、手动合并

分支合并时产生冲突后,我们需要手动将冲突的内容进行合并;

  • 将标记符号所在行删除,并且保留需要合并的内容即可;
    image-20211028221156879
  • 修改后需要重新添加文件至暂存区并 commit 提交;
    ⭐注意: 此时使用 git commit 命令时不可以带文件名!
    image-20211028221432343
  • 合并后
    image-20211028221500612
4、细节展示
  1. 合并分支只会修改当前分支的内容,并不会修改被合并的分支
  • 通过切换分支到 hot-fix 分支上查看 file.txt 文件image-20211028221752201

四、Github 操作

Gayhub 官网:github.com

😍😍😍全球最大的同性交友网站,技术宅男的天堂,新世界的大门!!!

1、创建远程仓库

image-20211028231701328
image-20211028231801333
image-20211028231934935

2、远程库常用命令

命令名称命令描述
git remote -v查看当前所有远程地址别名
git remote add 别名 远程地址起别名
git push 别名 分支推送本地分支上的内容到远程仓库
git clone 远程地址将远程仓库的内容克隆到本地
git pull 远程库地址别名 远程分支名将远程仓库对于分支的最新内容拉去下来之后与当前本地分支直接合并

1、git remote

用法:git remote add 远程仓库别名 远程仓库地址

  • 创建远程仓库别名:git remote add ori https://github.com/Xbai-hang/learnGit.git
    image-20211028233537022
    fetch 拉取、push 推送

2、git push

用法:git push 远程仓库别名/地址 远程仓库分支名

  • 将本地仓库分支推送至远程服务器(Github):git push ori master
    image-20211029000138111
            注意:由于 Github 服务器在国外,此处可能因为网络等原因推送失败,可以多次尝试或者使用科学上网工具辅助推送;作者学校的校园网将 Github IP 地址墙掉了,也可以尝试切换流量上网进行推送;

        如果报错:fatal: unable to access 'https://github.com/[userName]/[repoName].git/': Failed to connect to github.com port 443: Timed out

        可以尝试修改远程仓库连接地址为 ssh 方式:git remote set-url ori git@github.com:Xbai-hang/learnGit.git

image-20211029000434513
        如果是第一次使用 git 的 ssh 连接 github,需要生成一段 rsa 公钥并且设置在 github 上;

3、Rsa 公钥

1、生成 Rsa 公钥
  1. 检查是否已经有了 ssh 密钥:find ~/.ssh/id_rsa.pub
    可以找到文件则代表已经生成过了,为了展示,这里假装俺没有生成过;
    image-20211029001520559
  2. 生成密钥:ssh-keygen -t rsa -C "your github email",输入后敲击三次回车即可;
    image-20211029001949963
    这里为了不覆盖我之前生成的密钥,我选择了更改生成的路径:D:/
2、配置 Rsa 公钥
  1. 打开 C:/Users/用户名/.ssh/id_rsa.pub 文件并复制里面的所有内容;
  2. 打开 Github 官网首页,①.点击右上角个人头像,②点击 Settings,③点击 SSH and GPG keys,④在 SSH keys 栏左侧点击 New SSH key
  3. title 可以任意填写,在 Key 一栏中粘贴刚刚复制的文件 id_rsa.pub 文件中的内容
    image-20211029003051963
  4. 点击 Add SSH key,至此 配置 rsa 公钥完成;

4、git pull

用法:git pull 远程仓库别名/远程仓库地址 远程仓库分支名

  • 在 github 页面打开之前创建的仓库 learnGit,点击 file.txt 并直接修改它并点击 commit 提交,用以模拟多人协作;
    image-20211029005327703
  • 拉取远程仓库 master 分支最新代码:git pull ori master
    image-20211029005657373
  • 查看日志可以找到之前直接在 GitHub 网页 commit 的记录,远程仓库拉取成功;
    image-20211029010117172
  • 我们可以通过给 git log 命令添加属性 --pretty=oneline,使得每条日志显示一行,便于查看;git log --pretty=oneline
    image-20211029010339699

5、git clone

用法:git clone 远程仓库地址

  • 新建一个文件夹假装是第二个小伙伴,拉取我们的远程仓库代码;git clone git@github.com:Xbai-hang/learnGit.git
    image-20211029011344961
    注意: 这里选择了 ssh 的方式进行克隆,与 http 的方式的区别是:
    1. ssh 传输速度远快于 http,在我们克隆一些较大的开源项目时深有体会;
    2. ssh 传输需要配置 rsa 公钥,而 http 传输则不需要;
  • 进入仓库文件 cd ./learnGit,查看当前素有的远程仓库别名 git remote -v
    image-20211029011658957
    可以看到 Git 默认为我们的远程仓库地址起了别名,默认是 origin

3、跨团队协作

具体操作不再展示,作者自己也是 Github 拾荒者,还没有给别人修代码的能力,呜呜😥

  1. fork 其他人的开源项目至个人仓库;
  2. 拉取该项目至本地,修改,增添代码后提交推送至个人仓库;
  3. 提交一个 Pull Request 请求给该开源项目的作者;
  4. 作者审核后合并至该开源项目或者拒绝 Pull request;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

睫毛进眼睛了!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值