git全教程(长期更新)

news/2024/12/22 12:46:01 标签: git

git_0">1. git安装

git下载

有Linux,Mac,Windows三种版本用于下载
在这里插入图片描述

我们这里以Windows为例

1.1 安装exe

在这里插入图片描述
安装目录最好别有中文

建议选择vim编辑器
在这里插入图片描述

后面直接无脑点next即可

1.2 检验安装是否完备

安装完毕之后,目前比较新的版本的git都会自动将git的环境变量添加好

我们Win+r启动cmd(最好用管理员打开)
在这里插入图片描述
输入sh,回车
在这里插入图片描述
在这里插入图片描述
说明安装成功!

如果出现sh不是内部命令之类的,就需要我们手动给git配置环境变量

在这里插入图片描述
变量值为git安装目录(bin目录的上一级)

然后编辑Path系统变量,添加%GIT_HOME%\bin
在这里插入图片描述
最后保存退出即可

git_39">2. git日常使用(最基础和最频繁的操作)

在命令行输入sh和右键git bash here的区别在于,有一些命令属于linux,sh毕竟是windows的命令行,是无法使用的

在一个全英文的目录下新建文件夹:myFIrstGit

在这里插入图片描述

gitgit_bash_here_46">2.1 第一种git命令行:右键git bash here

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

这里可以使用ll -a这个Linux系统的命令,展示当前文件夹的所有内容

在这里插入图片描述
也可以使用windows的

gitsh_54">2.2 第二种git命令行:路径中输入sh

在这里插入图片描述
在这里输入sh,回车
在这里插入图片描述
两个界面几乎完全一致,但是这里无法使用ll -a
在这里插入图片描述

2.3 初始化(创建版本库)

git init
作用:将所在文件夹初始化为git本地仓库;之后将会生成.git文件夹,其中包含了本地仓库添加提交推送记录,本地仓库的用户名和邮箱,分支详情等信息

在这里插入图片描述
在这里插入图片描述
我们查看.git文件夹的内容,包含这些内容
在这里插入图片描述
其中config文件是用来存放本仓库的配置的
在这里插入图片描述

包含远程仓库的地址,本地仓库的用户名,邮箱等信息

COMMIT_EDITMSG保存了提交时附带的备注信息
在这里插入图片描述

2.4 添加文件+修改文件(基于Linux命令)

vi 文件名.拓展名
在这里插入图片描述

在这里插入图片描述
第一次进入默认阅读模式,点击i切换为编辑模式

在这里插入图片描述
在这里插入图片描述
esc退出编辑模式,然后输入:wq保存并退出
在这里插入图片描述
保存退出之后默认回到命令行界面
在这里插入图片描述

2.5 添加+提交修改的变动到本地仓库

2.5.1 添加文件到暂存区

git add .或者git add firstGit.txt

前者是添加当前所有文件到暂存区;后者是只添加指定的文件到暂存区

在这里插入图片描述

2.5.2 提交变动至本地仓库

使用git status查看当前目录的文件变动状态
在这里插入图片描述
我们可以发现新建了一个文件,并且已经被添加到了暂存区

随后使用git commit -m "提交的备注"将暂存区中的文件提交到本地仓库

在这里插入图片描述

2.6 将提交到本地仓库的变动推送到远程仓库

推送之前需要先连接,连接分为两种方式:https模式和ssh模式;
两者具体的过程大致相同,区别在于https需要验证一次账号密码,ssh则是需要保存ssh秘钥

githubgitee_117">2.6.1 创建github远端仓库和gitee远端仓库

首先创建github的仓库git_test
在这里插入图片描述

创建好之后是这样
在这里插入图片描述

然后创建gitee的仓库
在这里插入图片描述

2.6.2 与远端仓库建立连接

2.6.2.1 https方式建立连接
  1. 复制仓库的https的clone的联接
    在这里插入图片描述

  2. 回到本地的git命令行,添加本地remote,命名为origin

A

使用git remote 查看本地所有的rermote(远端仓库地址)
在这里插入图片描述
3. 添加本仓库的user.mail以及user.name

git config --local user.name 'username'
git config --local user.mail 'mail'
  1. 推送到远端仓库
 git push -u origin master # 这里的-u是--set-upstream的简称,--set-upstream用于设置上游分支(将本地仓库的分支与远端仓库的分支建立固定的联系,只有第一次需要这么做,后续推送代码可以直接git push)
 git push # 本地分支和远端分支建立联系之后可以省略多余参数

然后就会弹出输入账号密码的会话框

在这里插入图片描述
授权一次即可永久使用(创建了windows凭据)

随后代码即可正常推送到远端仓库

在这里插入图片描述

ssh秘钥的方式稍微复杂一点

2.6.2.2 ssh方式建立连接

在 Windows 的 GitBash 或 Linux 终端输入:

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

此命令将提示您用于存储密钥对和密码的位置和文件名。当提示输入位置和文件名时,只需按Enter键即可使用默认值。

或者直接

ssh-keygen

你可以把引号里的替换为你自己的邮箱

然后终端会让你输入一些东西,可以不用输入直接一路回车,看到一个像雪花一样的图案之后就说明成功了

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:t3925EJgD4kcUp69dBv/nqkM85n0I5mFRW4BlZwaVeo your_email@example.com
The key's randomart image is:
+---[RSA 4096]----+
|             .=o=|
|          .  . B |
|         o +  * .|
|        . * =oo+ |
|        So.B +A+ |
|         .o.B.o.o|
|          .o o+o.|
|           .*+B.*|
|            .OoBo|
+----[SHA256]-----+

linux:cat .ssh/id_rsa.pub 查看公钥
windows:在C盘下 .ssh 文件夹中会生成 id_rsa 和 id_rsa.pub 两个文件, id_rsa.pub是公钥文件

打开公钥文件并复制到github或者gitee的ssh秘钥配置中

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

2.6.2.3 测试ssh连接
ssh -T git@github.com

或者

在这里插入代码片

然后会提示测试连接成功
在这里插入图片描述
在这里插入图片描述

随后我们就可以在clone代码的时候选择ssh方式clone

在这里插入图片描述

并且第一次push代码时也不需要输入账号密码进行验证

2.6.3 推送代码

之前我们已经将变动提交到暂存区了,当我们将远端仓库和本地仓库建立连接之后,就可以推送代码了

git push origin master

在这里插入图片描述

3. 其他重要命令

3.1 查看提交记录历史

git log

在这里插入图片描述

回车可以向下继续查看,包含了项目的所有提交记录

:wq 保存退出

3.2 版本回退&&版本回退

git reset --hard HEAD^ # 退回上一个版本
git reset --hard HEAD~100 # 退回上100个版本

# 通过sha1的前四位退回到指定版本
git reset --hard xxxx

在这里插入图片描述
但是如果我又不想退回这个版本了,我想撤销回退,应该怎么做

git reflog # 查看所有历史版本

在这里插入图片描述
然后就又可以切回最新的版本

3.3 查看&修改配置信息

git config --local -l # 查看本地仓库级别配置
git config --global -l# 查看用户级别仓库配置
git config --system -l# 查看系统级别仓库配置

优先级:仓库级别 > 用户级别 > 系统级别

git 仓库级别对应的配置文件是当前仓库下的.git/config
git 用户级别对应的配置文件是用户宿主目录下的~/.gitconfig
git系统级别对应的配置文件是git安装目录下的 /etc/gitconfig

修改配置:

git config --级别 user.name ""
git config --级别 user.email ""

级别可以是:local,global,system

gitignore_306">3.4 .gitignore自动忽略添加文件

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式,匹配规则如下:

  1. “*”:星号匹配零个或多个任意字符
  2. []:匹配任何一个列在方括号中的字符,如[ab]匹配a或者匹配b
  3. “?”:问号匹配一个任意字符
  4. [n-m]:匹配所有在这两个字符范围内的字符,如[0-9]表示匹配所有0到9的数字

匹配示例
logs/: 忽略当前路径下的logs目录,包含logs下的所有子目录和文件
/logs.txt: 忽略根目录下的logs.txt文件
*.class: 忽略所有后缀为.class的文件
!/classes/a.class:不忽略classes目录下的a.class文件
tmp/*.txt: 只忽略tmp目录下的.txt文件
**/foo: 可以忽略/foo, a/foo, a/b/foo等

3.5 创建分支/切换分支/查看分支/删除分支

git_init_325">3.5.1 默认分支master并不是git init之后自动创建

当我们初始化仓库之后,本地仓库默认没有分支

HEAD是指向当前的分支,当前在哪个分支就指向哪个分支

分支指针指向提交

所以没有提交,也就没有分支,HEAD指针没地方指!

在这里插入图片描述

因为git仓库的HEAD指针要指向某一个提交分支的commit版本(默认该分支的最新提交版本),

所以只有提交了代码,才能真正创建默认的master分支

在这里插入图片描述
结果为空

当我们首次提交了代码之后
在这里插入图片描述
在这里插入图片描述
我们再查看分支,出现了master分支!
在这里插入图片描述

3.5.2 创建分支/切换分支/查看分支

切换分支需要先提交变动,或者暂存变动,才可以切换分支

git branch devlop # 创建本地分支devlop
git switch devlop # 切换到devlop分支上
git checkout -b devlop # 先创建,然后切换到devlop分支上
git branch # 查看自己所在的分支

git beanch -av # 查看本地和远程的所有分支,并且显示每个分支最新提交的备注
git remote # 查看当前本地分支推送对应的远端分支是哪个

3.5.3 删除分支

  1. 不能删除自己所在的分支
  2. 如果一个分支发生了变化不能删除
git branch -d devlop

3.6 分支合并

git pull = git fetch +git merge

合并到A分支,就再A分支上运行:

git merge B

3.6 暂存变动

我们发现会提示错误,git建议我们先提交或者stash修改的内容再切换
我们执行git stash
会先把修改的内容做保存然后我们就可以切换到其他的分支

我们再切回master分支执行,我们能看到上次保存的操作
git stash list
在这里插入图片描述

我们可以将stash过的修改恢复出来。通过pop取出最近的恢复并且删除stash中的修改
git stash pop
在这里插入图片描述

如果两次pop由于提一次没有做提交则会报错,所以我们应该把第一次pop的提交,再pop第二次暂存代码继续开发

3.7 删除远程分支

git push origin --delete feature

git_416">4. git流程示意图(包含内存结构图)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

注意:随着Git 2.23版本的发布,checkout的功能被拆分成了两个新的命令:switch和restore。
git switch:专门用于切换分支和创建新分支。它简化了分支管理的流程,使得用户更容易理解。
git restore:用于恢复工作目录和暂存区的文件,但不涉及分支的切换。
这一变化反映了Git社区对命令清晰性和易用性的追求。尽管checkout命令仍然可用(出于向后兼容的考虑),但推荐使用新的switch和restore命令。

在这里插入图片描述


http://www.niftyadmin.cn/n/5795372.html

相关文章

Linux之RPM和YUM命令

一、RPM命令 1、介绍 RPM(RedHat Package Manager).,RedHat软件包管理工具,类似windows里面的setup,exe是Liux这系列操作系统里而的打包安装工具。 RPMI包的名称格式: Apache-1.3.23-11.i386.rpm “apache’” 软件名称“1.3.23-11” 软件的版本号&am…

Emacs 折腾日记(五)——elisp 数字类型

本文是参考 emacs lisp 简明教程 写的,很多东西都是照搬里面的内容,如果各位读者觉得本文没有这篇教程优秀或者有抄袭嫌疑、又或者觉得我更新比较慢、再或者其他什么原因,请直接阅读上述链接中的教程。 上一篇我们讲了elisp中的流程控制结构相…

spring mvcservlet跳转页面没有样式效果

导致该问题的原因很多&#xff0c;这里为解决办法之一 原因 <!-- 配置视图解析器 --> <bean class"org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name"prefix" value"/jsp/"/> <pro…

深入探讨C++标准输入输出流:iostream

C标准库中的输入输出流(iostream)是处理数据输入和输出的核心部分&#xff0c;提供了灵活且高效的方式来读写各种数据类型。通过理解和运用iostream&#xff0c;开发者可以实现丰富的输入输出功能&#xff0c;从而增强程序的交互性和用户体验。本文将深入探讨C的标准输入输出流…

MySQL通过binlog日志进行数据恢复

记录一次阿里云MySQL通过binlog日志进行数据回滚 问题描述由于阿里云远程mysql没有做安全策略 所以服务器被别人远程攻击把数据库给删除&#xff0c;通过查看binlog日志可以看到进行了drop操作&#xff0c;下面将演示通过binlog日志进行数据回滚操作。 1、查询是否开始binlog …

【WRF教程第3.2期】预处理系统 WPS详解:以4.5版本为例

预处理系统 WPS 详解&#xff1a;以4.5版本为例 WPS 嵌套域&#xff08;WPS Nested Domains&#xff09;USGS 和 MODIS 土地利用重力波拖拽方案静态数据&#xff08;Gravity Wave Drag Scheme Static Data&#xff09;1. 什么是重力波拖拽方案&#xff08;GWDO&#xff09;静态…

为什么AI智能体需要工作流

在上一篇文章《大模型原理到提示词优化》中&#xff0c;我介绍了几种优化LLM回答效果的方法&#xff08;建议没看过的读者去看看&#xff09;。这些方法运用得当&#xff0c;能显著提升LLM回答的质量&#xff0c;特别是思维链和多轮交互的方式。虽然这些优化方法可以提升单个LL…

Go 语言GC(垃圾回收)的工作原理

Go语言的垃圾回收&#xff08;Garbage Collection&#xff0c;简称GC&#xff09;机制是一种自动的内存管理方法&#xff0c;它负责自动释放不再使用的内存&#xff0c;以避免内存泄漏和碎片化。Go语言的GC工作原理主要基于标记-清除&#xff08;mark-and-sweep&#xff09;算法…