git全教程(长期更新)

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

最后保存退出即可

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

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

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

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


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

也可以使用windows的

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秘钥

2.6.1 创建github远端仓库和gitee远端仓库

首先创建github的仓库git_test

创建好之后是这样

然后创建gitee的仓库

2.6.2 与远端仓库建立连接

2.6.2.1 https方式建立连接
  1. 复制仓库的https的clone的联接

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

使用git remote 查看本地所有的rermote(远端仓库地址)

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

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

授权一次即可永久使用(创建了windows凭据)

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

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

2.6.2.2 ssh方式建立连接

在 Windows 的 GitBash 或 Linux 终端输入:

bash 复制代码
$ ssh-keygen -t rsa -b 4096 -C "[email protected]"

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

或者直接

bash 复制代码
ssh-keygen

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

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

bash 复制代码
ssh-keygen -t rsa -b 4096 -C "[email protected]"
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 [email protected]
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连接
bash 复制代码
ssh -T [email protected]

或者

bash 复制代码
在这里插入代码片

然后会提示测试连接成功

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

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

2.6.3 推送代码

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

bash 复制代码
git push origin master

3. 其他重要命令

3.1 查看提交记录历史

bash 复制代码
git log

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

:wq 保存退出

3.2 版本回退&&版本回退

bash 复制代码
git reset --hard HEAD^ # 退回上一个版本
git reset --hard HEAD~100 # 退回上100个版本

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

但是如果我又不想退回这个版本了,我想撤销回退,应该怎么做

bash 复制代码
git reflog # 查看所有历史版本

然后就又可以切回最新的版本

3.3 查看&修改配置信息

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

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

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

修改配置:

bash 复制代码
git config --级别 user.name ""
git config --级别 user.email ""

级别可以是:local,global,system

3.4 .gitignore自动忽略添加文件

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

  1. "*":星号匹配零个或多个任意字符
  2. \]:匹配任何一个列在方括号中的字符,如\[ab\]匹配a或者匹配b

  3. 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 创建分支/切换分支/查看分支/删除分支

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

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

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

分支指针指向提交

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

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

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

结果为空

当我们首次提交了代码之后

我们再查看分支,出现了master分支!

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

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

bash 复制代码
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. 如果一个分支发生了变化不能删除
bash 复制代码
git branch -d devlop

3.6 分支合并

git pull = git fetch +git merge

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

bash 复制代码
git merge B

3.6 暂存变动

我们发现会提示错误,git建议我们先提交或者stash修改的内容再切换

我们执行git stash

会先把修改的内容做保存然后我们就可以切换到其他的分支

我们再切回master分支执行,我们能看到上次保存的操作

git stash list

我们可以将stash过的修改恢复出来。通过pop取出最近的恢复并且删除stash中的修改

git stash pop

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

3.7 删除远程分支

bash 复制代码
git push origin --delete feature

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

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

相关推荐
@hdd4 小时前
Git三剑客:工作区、暂存区、版本库深度解析
git
Ai 编码助手5 小时前
idea插件:AICommit,智能生成Git提交信息
java·git·intellij-idea
程序猿chen1 天前
《JVM考古现场(十六):太初奇点——从普朗克常量到宇宙弦的编译风暴》
jvm·git·后端·程序人生·金融·java-ee·量子计算
死磕java的孤行者1 天前
Git 分布式版本控制工具
分布式·git·elasticsearch
java搬砖工-苤-初心不变1 天前
解决 Git 通过 SSH 克隆仓库时自动转换为 HTTPS 的问题
git·https·ssh
Naomi5212 天前
自定义汇编语言(Custom Assembly Language) 和 Unix & Git
服务器·开发语言·git·unix
@BreCaspian2 天前
Git 从入门到精通(开源协作特别版)
git·开源
谢尔登2 天前
【已解决】Webstorm 每次使用 git pull/push 都要输入令牌/密码登录
ide·git·webstorm
紫阡星影2 天前
TortoiseGit多账号切换配置
git·gitee·tortoisegit
予早2 天前
git kex_exchange_identification 相关问题
git