Git教程

安装

官网安装,一路next即可

检查版本

1
git -v

初始化配置

  • 配置用户名
1
git config --global user.name "Your name"
  • 配置邮箱
1
git config --global user,email "mail@example.com"
  • 保存信息配置
1
git config --global credential.helper store
  • 查看配置信息
1
git config --global --list

注:–global表全局配置,对所有仓库有效

​ –local表本地配置,只对本地仓库有效(不写默认)

​ –system表系统配置,对所有系统用户生效

新建仓库

方式一:电脑本地创建仓库

1
2
3
4
git init
# 在当前文件夹创建一个本地仓库
git init <project-name>
# 在当前文件夹下创建一个新文件夹,再在新文件夹下创建一个本地长仓库

创建完成后会在目录下生成一个 .git 的隐藏文件目录,输入

1
2
3
ls -a

ls -altr

可查看隐藏文件的内容

方式二:克隆已经存在的仓库

1
git clone https://githun.com/<url>

会在当前文件夹先生生产一个文件目录,文件目录中才是所有的文件;

并不是把所有文件放在当前文件夹中;

工作区域

工作区

不管是在本地创建,还是克隆。你的目的是修改这个项目里的文件。

这个项目是放在你本地的一个文件夹中的,这个文件夹就是你的工作区,你可以在这个文件夹中对这个项目新增文件,删除文件,修改文件等操作。

[!IMPORTANT]

.git 文件夹不是工作区

暂存区

假设你要为一个项目新增一个“添加”的功能,你需要对这个项目添加和修改多个文件,如果每修改一次就直接提交(git commit),就导致提交过于频繁,一个功能会有多次提交。

如果到时候要查看这个”添加“功能动用了哪些文件,就要查询多次版本历史。

所以,就需要暂存区来保存已经修改的文件,通过(git add)可将文件添加至暂存区。

当“添加”功能开发完成后,再统一提交至仓库中。

做到“多次add,一次commit”。

仓库(版本库)

仓库分为本地仓库和远程仓库

按照我自己的话来说,仓库也可以叫版本库,它包含了一个项目的所有历史记录和修改记录(.git文件中,当然还包括分支),以及该项目的最新工作区。

所以git clone时会克隆下来 .git 文件最新的工作区

git commit将暂存区提交到本地仓库,git push将本地仓库推送同步到远程仓库

文件状态

未跟踪 Untrack

新创建的,从未被git管理

未修改 Unmodified

已经被git管理,但没有修改

已修改 Modified

修改过,但未放入暂存区

已暂存 Staged

已放入暂存区

image-20250117145030485

添加和提交

git status

使用git status命令可查看当前仓库的状态

image-20250120131150102

初始提示“nothing to commit ”

在工作区创建一个新文件“file1.txt”,再输入git status查看状态。

image-20250120131422754

提示仍然“nothing to commit”,但是多了“untracked file present”,存在未跟踪的文件。

git add与git commit

现在通过git add命令将file1.txt加入暂存区

image-20250120131649931

加入后再查看git仓库状态:

image-20250120131737276

可见file1已经变成了绿色,且“No commit yet”,且提示可使用 “git rm –cached ” 将文件移除暂存区

[!NOTE]

注意:若一个文件并未通过git add 添加到暂存区,则无法被提交

例如新创建一个file2,直接提交,只有处在暂存区的file1会提交,file2仍然不会提交

image-20250120134131841

image-20250120133955255

使用 git add . 可将所有未跟踪的(untracked)文件全部加入暂存区

git log

使用git log可查看提交的日志,其中作者名称和邮箱就是第二步配置的:

image-20250120134253044

在后面加上 **–oneline **可精简日志:

image-20250120134344412

git reset 回退版本

详细见图:

image-20250120205549490

详细演示:

  • 先添加三个文件,并且分三次提交(省略add和commit截图,直接查看log)

    image-20250120205717384

    image-20250120205857810

  • 接下来我通过git reset –mixed回退到版本2

    image-20250120210855544

    image-20250120210928324

  • 重新提交reset3后,再通过git reset –soft回退到版本1

    image-20250120221418540

    image-20250120221743884

  • 最后重新提交后,使用git reset –hard回退到 “第一次提交”,将全部回到最初的样子。

    image-20250120222152953

git diff查看差异

image-20250121002006705

  • git diff 查看工作区与暂存区之间的差异;若暂存区中没有文件,则会比较上一个版本的暂存区(也可以理解成最新的版本库)或者说会比较尚未暂存的文件的差异
  • git diff HEAD 查看工作区、暂存区与本地仓库之间的差异;或者说查看已暂存的与未暂存的所有改动
  • git diff - -cached 查看暂存区与本地仓库之间的差异
  • git diff 查看两次提交之间的差异;可以使用HEAD表示当前版本,HEAD~表示HEAD的前number个版本;例如git diff HEAD~3 HEAD,即比较从HEAD的上一个开始数的第3个,和HEAD之间的差异
  • **git diff **比较分支之间的差异

注意:以上所有命令都可以在最后添加具体的文件名,可以只查看这一个文件的差异

演示如下:

  • 仓库的初始状态

    image-20250121000252071

  • 现在我将file3.txt的内容修改为:“我修改了第三个文件”,直接使用git diff查看,可以查看未缓存的文件的差异

    image-20250121000656197

  • 现在我将其add后,再次查看差异

    image-20250121001426117

  • 现在我将其commit之后

    image-20250121001918504

删除文件

普通删除

如果使用windows的图形化删除,或者rm命令删除,实际上是把工作区中的文件删除了,需要先add,再commit一次才能同步删除操作到版本库

image-20250207211336362

  • 现在我删除掉file3

image-20250207211651879

  • 先add再commit

image-20250207212224122

使用git rm删除

具体演示:

  • 当前版本

image-20250207214724252

  • 使用 **git rm git rm -f**删除,将会删除工作区和暂存区的文件,,并将删除操作暂存起来,准备提交到 Git 仓库(比如仓库已有file4,但是这次修改了file4并add了,那么工作区、暂存区、版本库都会存在file4,git rm 并commit后,三个地方的file4都会被删除)

    • git rm 安全删除,会检查文件在暂存区中的状态,防止意外丢失数据。如上则无法删除,因为 Git 不允许你在有未提交更改的情况下直接删除文件,以防止数据丢失。(如已修改已暂存)

    image-20250207215328612

    • git rm -f 强制删除,忽略文件在暂存区中的状态,直接删除文件。

    image-20250207215635846

  • 使用git rm –cached ,仅从暂存区和 Git 仓库中删除文件,保留工作区中的文件,并取消git的跟踪,提交后版本库中才会删除。

image-20250207221359688

image-20250207221756612

配置GitHub密钥

1
2
ssh-keygen -t rsa -b 4096 -C "mail@example.com"
# 第一次连续回车三次即可

image-20250117193333087

查看生成的密钥

image-20250117193540884

复制 id_rsa.pub公钥中的内容,打开GitHub–头像–setting–SSH and GPG keys–New ssh key

1
2
vi id_rsa.pub
# windows以文本打开也行

[!NOTE]

如果在生成密钥时,指定了文件名则还需进行以下几步

【【GeekHour】一小时Git教程】 【精准空降到 06:28】 https://www.bilibili.com/video/BV1HM411377j/?p=11&share_source=copy_web&vd_source=238e2e1ec12ad57fce693f4520f7b4fe&t=388

Host github.com
HostName ssh.github.com # 这是最重要的部分 上面教程前面没有ssh.
Port 443 # 把22端口切换为443
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa


Git教程
https://blog.gutaicheng.top/2025/01/18/Git教程/
作者
GuTaicheng
发布于
2025年1月18日
许可协议