Git与Github入门(一)

Git与Github入门(一)

环境:在这里插入图片描述

Git与GitHub的来历

Linux 之父 Linus 在 1991 年创建开源的 Linux 操作系统之后,多年来依靠全世界广大热心志愿者的共同建设,经过长足发展,现已成为世界上最大的服务器系统。系统创建之初,代码贡献者将源码文件发送给 Linus,由其手动合并。这种方式维持多年后,代码量已经庞大到人工合并难以为继,于是深恶集中式版本控制系统的 Linus 选择了一个分布式商业版本控制系统 BitKeeper,不过 Linux 社区的建设者们可以免费使用它。BitKeeper 改变了 Linus 对版本控制的认识,同时 Linus 发现 BitKeeper 有一些不足,而且有个关键性的问题使之不能被广泛使用,就是不开源。

在 2005 年,BitKeeper 所在公司发现 Linux 社区有人企图破解它,BitKeeper 决定收回 Linux 社区的免费使用权。Linus 对此事调解数周无果,找遍了当时已知的各种版本控制系统,没有一个看上眼的,一怒之下决定自己搞一个。Linus 花了十天时间用 C 语言写好了一个开源的版本控制系统,就是著名的 Git。

2007 年旧金山三个年轻人觉得 Git 是个好东西,就搞了一个公司名字叫 GitHub,第二年上线了使用 Ruby 编写的同名网站 GitHub,这是一个基于 Git 的免费代码托管网站(有付费服务)。十年间,该网站迅速蹿红,击败了实力雄厚的 Google Code,成为全世界最受欢迎的代码托管网站。2018 年 6 月,GitHub 被财大气粗的 Microsoft 收购。2019 年 1 月 GitHub 宣布用户可以免费创建私有仓库。根据 2021年的 GitHub 年度报告显示,目前在全球已有 7300 万开发者用户,增加了213,319名首次开源项目贡献者。

在GitHub上创建仓库

一、注册

地址:https://github.com

根据提示填写对应信息即可。因为GitHub的服务器在国外,所以可能会访问失败,耐心多是几次即可;另外,某些浏览器可能不受GitHub的支持,会给出相应的提示。

二、创建仓库

在个人主页右上角点击New repository 创建新的仓库:

安装Git

1.Linux

二进制安装程序安装:

基于RPM的发行版,例如CentOs
$ sudo dnf install git-all
基于Debian
$ sudo apt install git-all

从源代码安装:

能得到最新的版本,如果想从源码安装 Git,需要安装 Git 依赖的库:autotools、curl、zlib、openssl、expat 和 libiconv。 如果你的系统上有 dnf (如 Fedora)或者 apt(如基于 Debian 的系统), 可以使用对应的命令来安装最少的依赖以便编译并安装 Git 的二进制版:

$ sudo dnf install dh-autoreconf curl-devel expat-devel gettext-devel \
  openssl-devel perl-devel zlib-devel
$ sudo apt-get install dh-autoreconf libcurl4-gnutls-dev libexpat1-dev \
  gettext libz-dev libssl-dev

为了添加文档的多种格式(doc、html、info),需要以下附加的依赖:

$ sudo dnf install asciidoc xmlto docbook2X
$ sudo apt-get install asciidoc xmlto docbook2x
Note使用 RHEL 和 RHEL 衍生版,如 CentOS 和 Scientific Linux 的用户需要 开启 EPEL 库 以便下载 docbook2X 包。

如果使用基于 Debian 的发行版(Debian/Ubuntu/Ubuntu-derivatives),你也需要 install-info 包:

$ sudo apt-get install install-info

如果你使用基于 RPM 的发行版(Fedora/RHEL/RHEL衍生版),你还需要 getopt 包 (它已经在基于 Debian 的发行版中预装了):

$ sudo dnf install getopt

此外,如果使用 Fedora/RHEL/RHEL衍生版,需要执行以下命令:

$ sudo ln -s /usr/bin/db2x_docbook2texi /usr/bin/docbook2x-texi

以此来解决二进制文件名的不同。

当安装好所有的必要依赖,你可以继续从几个地方来取得最新发布版本的 tar 包。 可以从 Kernel.org 网站获取,网址为 https://www.kernel.org/pub/software/scm/git, 或从 GitHub 网站上的镜像来获得,网址为 https://github.com/git/git/releases。 通常在 GitHub 上的是最新版本,但 kernel.org 上包含有文件下载签名,如果想验证下载正确性的话会用到。

接着,编译并安装:

$ tar -zxf git-2.8.0.tar.gz
$ cd git-2.8.0
$ make configure
$ ./configure --prefix=/usr
$ make all doc info
$ sudo make install install-doc install-html install-info

完成后,可以使用 Git 来获取 Git 的更新:

$ git clone git://git.kernel.org/pub/scm/git/git.git

2.Windows

Windons也有多种安装方法,官方版本可以在 Git 官方网站下载。 打开 https://git-scm.com/download/win,下载会自动开始。 要注意这是一个名为 Git for Windows 的项目(也叫做 msysGit),和 Git 是分别独立的项目;更多信息请访问 http://msysgit.github.io/。

要进行自动安装,你可以使用 Git Chocolatey 包。 注意 Chocolatey 包是由社区维护的。

另一个简单的方法是安装 GitHub Desktop。 该安装程序包含图形化和命令行版本的 Git。 它也能支持 Powershell,提供了稳定的凭证缓存和健全的换行设置。 稍后我们会对这方面有更多了解,现在只要一句话就够了,这些都是你所需要的。 你可以在 GitHub for Windows 网站下载,网址为 GitHub Desktop 网站

3.Mac

二进制程序安装

官方维护的 macOS Git 安装程序可以在 Git 官方网站下载,网址为 https://git-scm.com/download/mac

命令行工具安装:

安装 Xcode Command Line Tools。 Mavericks (10.9) 或更高版本的系统中,在 Terminal 里尝试首次运行 ‘git’ 命令即可。

$ git --version

添加SSH关联授权

2021 年 8 月 GitHub 不再允许使用账户密码操作 GitHub,必须使用 SSH 密钥登陆。

2022 年 3 月 15 日,GitHub 又通过删除较旧的不安全密钥类型提高了安全性。

接下来,我们可以在系统中创建 SSH 公私钥,并将公钥放到 GitHub 指定位置。如此操作即可生成 GitHub 账户对于当前系统中的 Git 授权。

ssh-keygen -t -C "邮箱地址"

在这里插入图片描述
这样就生成了公私钥。公私钥存放在位置(隐藏文件)

将pub文件中的公钥内容复制出来,然后在GitHub网页上添加公钥(鼠标单击头像->settings):
在这里插入图片描述
title自定义,把剪切板中的内容粘贴到 Key 中,点击绿色按钮添加 SSH Key 即可:
在这里插入图片描述

使用ssh的好处:
  • 免密码推送,执行 git push 时不再需要输入用户名和密码了;
  • 提高数据传输速度。但不是必须的,比如不经尝使用或者使用一次性的虚拟环境,就没有必要创建 SSH 了,因为相较好处来说,还是太麻烦了。

克隆GitHub上的仓库到本地

命令:

git clone [仓库地址]

回到仓库主目录:
在这里插入图片描述
或者
在这里插入图片描述
重要的一点:只有使用 git 开头的地址克隆仓库,SSH 关联才会起作用。

.git隐藏目录:

里面包含了仓库的全部信息,删掉这个目录,仓库就变成普通的目录了:
在这里插入图片描述
在 GitHub 上创建一个仓库时,同时生成了仓库的默认主机名 origin,并创建了默认分支 master。GitHub 可以看成是免费的 Git 服务器,在 GitHub 上创建仓库,会自动生成一个仓库地址,主机就是指代这个仓库,主机名就等于这个仓库地址。克隆一个 GitHub 仓库(也叫远程仓库)到本地,本地仓库则会自动关联到这个远程仓库,执行 git remote -v 命令可以查看本地仓库所关联的远程仓库信息:
在这里插入图片描述
Git 要求对本地仓库关联的每个远程主机都必须指定一个主机名(默认为 origin),用于本地仓库识别自己关联的主机,git remote 命令就用于管理本地仓库所关联的主机,一个本地仓库可以关联任意多个主机(即远程仓库)。
克隆远程仓库到本地时,还可以使用 -o 选项修改主机名,在地址后面加上一个字段作为本地仓库的主目录名:

在这里插入图片描述

Git基础操作

git仓库的三大区域

Git 本地仓库三大区域:工作区、暂存区、版本区

在这里插入图片描述
开发者与仓库:
在这里插入图片描述

添加修改到暂存区以及撤销修改

1.修改

进入仓库主目录:

cd [目录名]

在这里插入图片描述
查看仓库的管理状态:

git status

在这里插入图片描述
创建一个文件后再次查看仓库的管理状态:
在这里插入图片描述
新增文件后,可见描述内容已经发生了变化,大概内容就是:你的分支为远程主机origin做了更新,可以使用add命令来添加中包含的修改到暂存区才能被commit命令提交修改,使用commit命令提交修改前需要先使用add命令去给文件添加到暂存区跟踪。
命令:

git add [文件名]

即把新增/修改的文件添加到暂存区,以备提交:
在这里插入图片描述

如需同时修改/新增了多个文件并需要添加到修改区,可使用:

git add .

将新增/修改文件全部添加到暂存区。

2.撤销修改

撤销添加的修改:

git restore --staged [文件名] 或者 git reset --[文件名] 或者 git rm --cached [文件名称]

在这里插入图片描述

如果省略最后的文件名,把命令写成 git reset -- 即可把暂存区的全部修改撤销。

查看工作区被跟踪文件的修改详情

命令:

git diff

用来查看工作区被跟踪的文件的修改详情

修改被跟踪文件再次执行执行git diff
此时会跳到工作区修改详情页,按 Q 退出此页面
在这里插入图片描述
再次添加修改后,被跟踪文件暂无修改,所以看不到详情。
使用 git diff --cached 可查看暂存区的全部修改:

在这里插入图片描述

提交修改以及产看提交历史

1.提交修改

命令:

git commit -m

把暂存区的修改提交到版本区,生成一个新的提交版本,-m用来提供提交的备注(如果不填写,将需要手动编辑):

在这里插入图片描述
俩种方式的结果是一样的
在这里插入图片描述
命令:

git commit -a

-a ,它的作用是将未添加到暂存区的修改,也就是工作区的修改也一并提交,但会略过未被跟踪的文件,比如新建的文件 helloword.py。此命令的完整格式:git commit -am xxxxx

保险的做法是按照前面的顺序,修改工作区 -> 提交到暂存区 -> 随时使用 git status 查看仓库状态 -> 将暂存区的修改提交到版本区生成一次新的提交。

提交后,暂存区的修改被清空。

2.查看修改历史

命令:

git log

查看版本区的提交历史记录

此命令同样会跳转到新页面:
在这里插入图片描述
红色框中的十六进制序列号就是提交版本号,这是很重要的信息,每个提交都有自己单独的版本号,这是git辨别提交的根本。
按照时间正序排列:
在这里插入图片描述
此命令的一些常用选项:

  • git log [分支名] 查看某分支的提交历史,不写分支名查看当前所在分支
  • git log --oneline 一行显示提交历史
  • git log -n 其中 n 是数字,查看最近 n 个提交
  • git log --author [贡献者名字] 查看指定贡献者的提交记录
  • git log --graph 图示法显示提交历史

配置个人信息

假如没有进行git的一些本地配置,就不能提交修改以及克隆仓库,说白了就是如果你没有配置你的本地身份,团队就不能区分该修改是谁修改的,所以必须进行配置。

1.配置

命令:

git config --global user.name:GitHub的账户名称
git config --global user.email:GitHub的邮箱号

在这里插入图片描述

**global:**传递 --local 选项让 Git 强制读写此文件

2.查看配置

命令:

git config -l 或者 git config --list

在这里插入图片描述

产看全部分支的信息

命令:

git branch -avv

在这里插入图片描述

说明

L1:开头的星号表示当前所在分支,绿色的 main 是分支名,之所以是绿色,也是因为它是当前所在分支。后面第二项是版本号,第三项中括号里面蓝色的字,表示此分支跟踪的远程分支的名字;冒号后面的文字表示本地分支领先其跟踪的远程分支一个提交。最后一项是提交时填写的备注信息

L2:是 Git 指针信息,它指向远程仓库的 master 分支,这行信息暂不重要

L3:远程分支信息

将本地新增的修改提交推送到GitHub远程仓库中

命令:

git push

把本地仓库 master 分支上的新增提交推送到远程仓库的同名分支上,因为当前所在的分支就是 master,而且上文提到,它已经跟踪了远程仓库的同名分支:

在这里插入图片描述

推送成功后执行 git branch -avv 查看分支情况:
在这里插入图片描述

本地分支 master 与远程分支 origin/master 的版本号一致,通常看两个版本号是否一致,只需比对前四位。网页上的情况:
在这里插入图片描述

版本回滚

如果发现提交的修改有误,可以修改此文件然后再次添加到暂存区,然后按照前面的步骤分别提交、推送,当然,也可以撤销前面的错去提交,也就是把你写的bug重新撤回。

此时,仓库中的文件将会回到没修改前的版本。

命令:

git reset --soft HEAD^

可以撤销最近的一次提交,将修改还原到暂存区。--soft 表示软回回退( 使用–soft回退只回退了commit的信息,不会恢复到暂存区对文件的修改,暂存区文件修改的内容还保存在里面,不会变;如果还要将暂存区里的内容提交,直接commit即可), --hard 硬回退(彻底回退到某个版本,本地的代码会变为上一个版本的内容,修改的内容全部被丢掉;不管是commit的修改,还是暂存区文件中修改的内容都不会被保留!一旦回滚,使用log是找不回来的,只能借助于reflog)。
HEAD^ 表示撤销一次提交,HEAD^^` 表示撤销两次提交,撤销 n 次可以简写为 `HEAD~n`。软退回一个提交后执行 `git branch -avv` 命令查看分支信息:
在这里插入图片描述
可以看到本地仓库分支的版本号已经发生了变化,变成了前一次提交的版本号,中括号里也有提示信息,本地分支落后其跟踪的远程分支 origin/master 一个提交。

执行 git status 查看
在这里插入图片描述

上一个提交中的修改就会全部被还原到暂存区

处理commit时间线分叉

所谓的时间线分叉,

命令:

git status #查看仓库状态
git branch -avv #查看分支状态

在这里插入图片描述

可以看到本地仓库的分支与远程仓库的 origin/mian分支在提交版本上有了冲突。

这是因为刚才的提交操作不是基于远程仓库 origin/main 分支的最新提交版本,而是撤回了一个版本。这种情况可以将本地分支推送到远程仓库的,需要加一个选项 -f ,它是 --force 的简写,这就是强制推送:
在这里插入图片描述
执行 git branch -avv
在这里插入图片描述

本地 master 与远程 master 的版本号一致,前四位都是 ,刷新 GitHub 页面:
在这里插入图片描述

本地仓库commit变化记录

该操作是为了防止被撤回的是正确提交,后面做的操作才是误操作。此时当然可以重新进行版本修改,但是,假如量巨多呢?这岂不是加速了头发掉落的节奏!此时利用好本地的提交变化记录就派上用场啦!

命令:

git reflog

记录本地仓库所有分支的每一次版本变化。实际上只要本地仓库不被删除,随你怎么折腾,都能回退到任何地方。reflog 记录只存在于本地仓库中,本地仓库删除后,记录才消失:

在这里插入图片描述

回退到一开始的正确版本

命令:

git reset --hard [版本号]

也可以:

git reset --hard HEAD@{n}

其中HEAD{n}就是当前分支最近n次提交的版本,而加上git reset就是回到最近n次提交版本变化前。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值