Git阶段学习总结

Git的入门学习

(这篇博客本来是昨天发布的,但由于博客园网站默认不显示文章到主页,所以今天重新发布该博客,还望海涵)
​ 由于本次实验需要使用Git的分支操作,在学习分支的过程中,萌生出对目前Git的所学所思做一个梳理,以便后续复习查阅。(该知识梳理为课堂PPT的内容与Git入门实践课程的结合,如有错误,还请批评指正。)

Git简介

Git原理

Git将每个文件的每个版本作为一个副本进行保存,允许多个commit共享一个文件副本(进而节省存储新版本的空间)。因此,Git中每个版本均以副本形式存储,创建分支的速度与版本历史复杂程度无关。

相比之下,传统版本控制工具通过存储版本之间的改变以存储版本,创建分支的速度与版本历史复杂程度有关。Git存储发生变化的文件(而非代码行), 不变化的文件不重复存储。

Git安装

​ 在终端中使用git version命令可以查看所安装的Git版本。

添加SSH关联

在 2021 年 8 月 GitHub 更新后,已经不再允许使用账户密码操作 GitHub,必须使用 SSH 密钥登陆。所以我们可以在系统中创建 SSH 公私钥,并将公钥放到 GitHub 指定位置。如此操作即可生成 GitHub 账户对于当前系统中的 Git 授权。

在终端执行ssh-keygen按几次回车生成公私钥,公私钥存放在主目录下的隐藏目录 .ssh 中的两个文件:id_rsa.pub和id_rsa中。(Window中存储在当前用户的.ssh文件夹中)

打开id_rsa.pub文件,将其中的公钥内容复制出来。然后在GitHub网页上添加公钥:Title 自定义,把内容粘贴到 Key 中,点击绿色按钮添加 SSH Key 即可。

使用SSH的好处:

  • 免密码推送,执行 git push 时不再需要输入用户名和密码了;
  • 提高数据传输速度。

配置Git

使用下面这两个命令来进行一些本地配置

  • user.email:写入你自己注册 GitHub 账号的邮箱
  • user.name:你自己的 GitHub 账号名字

设置成功后,可以使用git config -l 可以查看配置信息。

完成后系统自动生成 Git 的配置文件,就是主目录中的隐藏文件.gitconfig

此配置文件也可以手动修改

克隆GitHub上的仓库到本地

git clone

跳转到想要复制的仓库,点击Clone or download 选择使用SSH,复制SSH连接,使用 git clone + [仓库地址] 命令即可。

克隆以后,进入本地仓库主目录,主目录中有个.git隐藏目录,它里面包含了仓库的全部信息,删掉这个目录,仓库就变成普通的目录了。使用Git Bash打开此目录,可以看到命令行前缀有一个(master),这是我们当前所在的分支名。

当我们 在GitHub 上创建一个仓库时,同时生成了仓库的默认主机名 origin,并创建了默认分支 master。GitHub 可以看成是免费的 Git 服务器,在 GitHub 上创建仓库,会自动生成一个仓库地址,主机就是指代这个仓库,主机名就等于这个仓库地址。

克隆一个 GitHub 仓库(也叫远程仓库)到本地,本地仓库则会自动关联到这个远程仓库,执行 git remote -v 命令可以查看本地仓库所关联的远程仓库信息

Git 要求对本地仓库关联的每个远程主机都必须指定一个主机名(默认为 origin),用于本地仓库识别自己关联的主机,git remote 命令就用于管理本地仓库所关联的主机,一个本地仓库可以关联任意多个主机(即远程仓库)。

克隆远程仓库到本地时,还可以使用 -o 选项修改主机名,在地址后面加上一个字段作为本地仓库的主目录名

git init

git init命令用于将当前目录变成一个本地仓库,但是由于GitHub的存在,我们很少用到此命令。

Git基础操作

Git仓库的三大区域

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

image

各个工作区域

  • 工作区(workspace):可直接编辑,相当于工作副本
  • 暂存区(staging):记录工作区中被修改过且修改被添加到暂存区的文件。
  • (版本区)本地仓库:即位于本地的版本仓库
  • 远程仓库:即位于远程的版本仓库

基本命令介绍

git status

通过Git Bash打开仓库主目录,执行git status来查看整个仓库的状态

创建文件进行修改,再次执行此命令可以看到命令行前缀又发生了一些微小的变化,红色 master 后面出现了 * 星号,这表示工作区或暂存区有变化,对文件进行增删改操作都会出现这个星号。

git add

使用 git add [文件名] 命令跟踪此新建文件,即把新增文件添加到暂存区。(其中 git add .命令可以将全部文件添加到暂存区,如果对多个文件或目录进行了增删改)

git reset

git add 命令是将这些修改添加到暂存区,暂存区记录的只是修改。如果要撤销暂存区的修改执行 git reset -- [文件名] 或者 git rm --cached [文件名] 命令即可:(如果省略最后的文件名,则把暂存区的全部修改撤销)

git diff

git diff,它可以用来查看工作区被跟踪的文件的修改详情。执行此命令会跳转到新的页面,即工作区修改详情页,按 Q 退出此页面:

使用 git diff --cached 查看暂存区的全部修改。此命令也会跳到新的页面,即暂存区修改详情页。

git commit

接下来,将执行 git commit 命令把暂存区的修改提交到版本区,生成一个新的版本。其有一个必须的选项-m 用来提供该提交的备注:

提交后,暂存区的修改被清空,执行 git log 查看提交记录,紫色框中的十六进制序列号就是提交版本号,这是很重要的信息,每个提交都有自己单独的版本号,就像公民身份证号一样。

上面的提交信息,提交版本是按倒叙排列的,即最近的提交排在最上面,可以使用 git log --reverse 命令查看时间正序排列的信息。

git commit -a 命令可以将未添加到暂存区的修改,也就是工作区的修改也一并提交,但会略过未被跟踪的文件。但此方法并不提倡,谨慎的做法是按照刚才的顺序,修改工作区 - 提交到暂存区 - 随时使用 git status 查看仓库状态 - 将暂存区的修改提交到版本区生成一次新的提交。

git log

命令 git log,它用来查看版本区的提交历史记录,此命令也会跳到新页面

关于查看提交历史记录的命令,有些常用的选项介绍一下:

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

git branch -avv

git branch -avv,它用来查看全部分支信息

上图有三行信息,依次说明:

第一行,开头的星号表示当前所在分支,绿色的 master 是分支名,之所以是绿色,也是因为它是当前所在分支。后面第二项是版本号第三项中括号里面蓝色的字,表示此分支跟踪的远程分支的名字,这也是克隆远程仓库到本地时的默认设置 -- 创建 master 分支并自动跟踪远程同名分支;冒号后面黑色文字表示本地分支领先其跟踪的远程分支一个提交最后一项是提交时填写的备注信息。

第二行,是 Git 指针信息,它指向远程仓库的 master 分支。

第三行,远程分支信息。

git push

最后一个环节,将本地新增的提交推送到 GitHub 远程仓库中,命令是 git push,后面不需要任何选项和参数,此命令会把本地仓库 master 分支上的新增提交推送到远程仓库的同名分支上,因为当前所在的分支就是 master。

版本回退

如果发现提交的文件有误,可以修改此文件然后再次添加到暂存区、提交、推送,也可以撤销最近一次提交,修改文件后重新提交推送。后一种方法如下所示:

首先执行 git reset --soft HEAD^ 撤销最近的一次提交,将修改还原到暂存区。--soft 表示软退回,对应的还有 --hard 硬退回。HEAD^ 表示撤销一次提交,HEAD^^ 表示撤销两次提交,撤销 n 次可以简写为 HEAD~n。软退回一个提交后执行 git branch -avv 命令查看分支信息:

可以看到本地仓库的 master 分支的版本号已经发生了变化,变成了前一次提交的版本号,中括号里也有提示信息,本地分支 master 落后其跟踪的远程分支 origin/master 一个提交。

执行 git status 查看仓库状态,上一个提交中的修改全部扔回了暂存区:

重写修改后,执行 git add . 命令将新的修改添加到暂存区,然后执行 git commit 命令生成新的提交。但是此时再执行 git statusgit branch -avv 查看仓库状态和分支状态:

可以看到本地仓库的master分支与远程仓库的origin/master分支再提交版本上有了冲突,又叫提交时间线分叉。因为刚才的提交不是基于远程仓库origin/master分支的最新提交版本,而是撤回了一个版本。这种情况下要将本地master分支推送到远程仓库需要加一个选项 -f ,它是 --force 的简写,这就是强制推送:

执行 git branch -avv 看一下分支信息,本地 master 与远程 master 的版本号一致,前四位都是 e290(通常看两个版本号是否一致,只需比对前四位)

本地仓库commit变化记录

如果此时发现刚才撤销前的提交是正确的,即刚才的版本回退操作都是误操作。这是可以使用 git reflog 命令,它会记录本地仓库所有分支的每一次版本变化。

reflog 记录只存在于本地仓库中,本地仓库删除后,记录消失。执行此命令如下图所示:

如果想回退到5c04那个版本(撤销之前的提交版本),可以直接执行命令 git reset --hard [版本号] 。也可以执行 git reset --hard HEAD@{2} 命令,其中 HEAD@{2} 就是上图第 3 行第 2 列所示,这个命令的意思是回到当前分支最近两次提交版本变化前。

Git分支操作

Git命令别名设置

Git中的一些命令的重复度极高,比如 git statusgit branch -avv 等,Git 可以对这些命令设置别名,以便简化对它们的使用,设置别名的命令是 git config --global alias.[别名] [原命令],如果原命令中有选项,需要加引号。别名是自定义的,可以随意命名,设置后,原命令和别名具有同等作用。(该设置是对Git的本地配置,无需多次配置)

自己设置的别名要记住,也可以使用 git config -l 命令查看配置文件。

git fetch刷新本地分支信息

git fetch,它的作用是将远程仓库的分支信息拉取到本地仓库,注意,仅仅是更新了本地的远程分支信息。

举例说明,首先在GitHub页面上对文件进行修改并增加一次提交。

在本地主目录执行 git fetch 命令,然后执行 git branch -avv 查看分支信息:

可以看到,本地分支 master 的版本号无变化,而远程分支已经更新。所以,fetch 命令的作用是刷新保存在本地仓库的远程分支信息,此命令需要联网。

如果想要让本地master分支的提交版本变为最新版,可以执行 git pull 命令来拉取远程分支到本地,pull 是拉取远程仓库的数据到本地,需要联网,而由于前面执行过 git fetch 命令,所以也可以执行 git rebase origin/master 命令来实现 “使本地 master 分支基于远程仓库的 master 分支”。

Git分支操作

创建新的本地分支

应用场景:一个项目上线了1.0版本,研发部门需要开发1.1和1.2两个测试版,增加不同的新功能,测试版的代码不能再正式版所在的分支上,此时需要新的分支来存放不同版次的代码。

执行 git branch [分支名] 可以创建新的分支,此命令创建新分支后并未切换到新分支,还是在 master 分支上,执行 git checkout [分支名] 切换分支,checkout 也是常用命令,先给它设置别名,然后切换分支。

另一个常用的命令 git checkout -b [分支名] 创建分支并切换到新分支。

新建的本地分支信息,它们的版本号与主分支 master 一致,这是因为在哪个分支上创建新分支,新分支的提交记录就与哪个分支一致。新建分支并无跟踪任何远程分支,所以没有 master 分支中的中括号和括号内的蓝色远程分支名。

将新分支中的提交推送至远程仓库

在当前分支上开发一个新的功能,增加一个文件,生成一个新的提交到本地仓库。推送的正常逻辑是推送到远程仓库的同名分支。

执行 git push [主机名] [本地分支名]:[远程分支名] 即可将本地分支推送到远程仓库的分支中,通常冒号前后的分支名是相同的,如果是相同的,可以省略 :[远程分支名],如果远程分支不存在,会自动创建。

上图命令可以简写为 git push origin dev1

本地分支跟踪远程分支

当我们再次在 dev1 分支上修改并提交,推送到远程仓库时还是要输入上面的那个长长的命令。而使得本地分支跟踪远程分支后,就可以和master分支一样,直接使用git push命令推送了。

执行这个命令 git branch -u [主机名/远程分支名] [本地分支名] 将本地分支与远程分支关联,或者说使本地分支跟踪远程分支。如果是设置当前所在分支跟踪远程分支,最后一个参数本地分支名可以省略不写(注意,第一个参数是远程分支名,第二个参数才是本地分支名,与push相反

这个命令的 -u 选项是 --set-upstream 的缩写。执行 git branch --unset-upstream [分支名] 即可撤销该分支对远程分支的跟踪,如果撤销当前所在的分支的跟踪,分支名可以省略不写。

Tips:在推送的时候,加个 --set-upstream 或其简写 -u 选项可以在推送时就自动跟踪远程分支。

删除远程分支

删除远程分支,使用 git push [主机名] :[远程分支名] ,如果一次性删除多个,可以这样:git push [主机名] :[远程分支名] :[远程分支名] :[远程分支名] 。此命令的原理是将空分支推送到远程分支,结果自然就是远程分支被删除。另一个删除远程分支的命令:git push [主机名] --delete [远程分支名]。删除远程分支的命令可以在任意本地分支中执行。

本地分支的更名与删除

使用 git branch -D [分支名] 删除本地分支,同样地,此命令也可以一次删除多个,将需要删除的分支名罗列在命令后面即可。在此之前,先介绍一个极少用到的命令:给本地分支改名 git branch -m [原分支名] [新分支名] ,若修改当前所在分支的名字,原分支名可以省略不写。

注意:当前所在的分支不能被删除

posted @   HIT_TUHUAST  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示