Tommy's Blog Tommy's Blog
首页
  • IT专题
  • 考研学习
  • 英语学习
  • 考公学习
  • 斗资博弈
  • 随笔
Tags
正经人
时光机
  • 关于
  • 建站分享
  • Hexo教程
GitHub (opens new window)

Tommy

实事求是
首页
  • IT专题
  • 考研学习
  • 英语学习
  • 考公学习
  • 斗资博弈
  • 随笔
Tags
正经人
时光机
  • 关于
  • 建站分享
  • Hexo教程
GitHub (opens new window)
  • 计算机相关分享 目录
  • Vuepress静态网站搭建分享

    • VuePress 博客配置经历
    • Vdoing 主题配置经验
    • Vdoing 适配插件研究
    • VuePress 样式调整出探索
    • 域名购买与解析博客
    • 加快国内访问Github Pages速度的方法
    • Git版本管理软件使用心得
      • 更新记录
      • 小介绍
      • 难度: 二星
      • 第一部分:基础操作介绍
        • 1. 首先是执行克隆指令
        • 2. 执行初始化指令, 生成与仓库的通讯链接
        • 3. 增删查改的方法
        • 批量删除/新建文件后同步至仓库
        • 推送上传至仓库
        • 4.下载仓库内容至本地
        • 避坑
      • 第二部分:Git连接Github
        • 一、 生成 SSH 密钥
        • 1. 打开终端
        • 2. 运行 SSH 密钥生成命令
        • 3. 指定密钥保存位置
        • 4. 设置密钥密码
        • 输入 SSH 密钥密码
        • 后续步骤
        • 二、复制 SSH 公钥
        • 三、添加 SSH 公钥到 GitHub
        • 四、 测试 SSH 连接
        • 五、开始使用 SSH 进行 Git 操作
        • 常见问题解决
        • 无法连接服务的解决方法
      • 实战操作案例——Git分支推送历史功能
        • 实战操作方法
        • 情况一:修改提交了commit且push
        • 情况二:修改并提交了,但没有push
        • 0924分支推送记录
        • Git操作收获——commit --amend
        • 0925分之推送报错——commit未出分支上,需要把commit重回分支
        • 解决方法
        • 0926分支回退并重新push操作调研
      • 常用Git代码分享
    • PicGo图床配置经验总结
    • CDN图床加速:可用的JsDelivr域名测试
  • 本BLOG网站维护关键信息

  • C++刷题

  • windows坑爹问题杂谈

  • Hexo静态博客相关

  • 计算机相关分享
  • Vuepress静态网站搭建分享
TommyZeng
2023-01-27
目录

Git版本管理软件使用心得

# 更新记录

2024.01.26更新: 更新了Git使用SSH连接对应Github的方法

2022.04.02更新 相信新手最抓狂的问题估计就是怎么在GitHub仓库中建新文件以及删除旧的文件,这篇文章就来一探究竟。看之前可以好好看看这张图, 结合文章内容就可以更好的理解git的机制了。

2023.01.29更新:更新了具体的操作案例和整理更完善的git命令大全,大家可以直接翻到最后的案例,结合实操案例,会好理解很多。


# 小介绍

这是一个想混迹Github不可缺少的重要工具,是Github仓库的版本控制工具。不过相信大多数人和我一样,最早接触时估计都给整的够呛,今天就专门介绍些简单的操作,方便大家初上手。


# 难度: 二星

这个工具最开始接触的时候可能不好理解,觉得用不明白,但其实内核极其强大,是一个极其离谱的版本管理工具。缺点就是上手较难,代码化操作时间久了经常忘记,但功能真的很强大,不得不学习,大家可以尝试我分享的实操案例,体验无限版本的代码回退。然后就可以赞叹这夸张的信息保存能力(关键是还不占空间)。


注意

想执行以下所有内容, 必须先把Git配置好, 所有操作都是基于Git的

可能有些小伙伴新入坑还没搞懂,这里再次提醒一下 GitHub是开源代码托管(存放、管理)平台 Git是进行开源软件的版本管理的(用人话说就是专用的文件上传下载工具)

安装教程我贴在这里, 有需要的小伙伴自取 Git - Downloading Package (git-scm.com) (opens new window) Windows系统Git安装教程(详解Git安装过程) - 学为所用 - 博客园 (cnblogs.com) (opens new window)

以下操作将重点介绍两个最常见的用途:

  • 情景一: 把网上已经建立且运营中的仓库克隆(下载)至本地
  • 情景二: 本地自己创建的项目, 想把文件共享出来供别人学(bai)习(piao),所以需要把本地文件上传上去



# 第一部分:基础操作介绍

场景:克隆Github上的仓库内容并进行基本的文件操作(读、写、修改等)

先讲讲克隆的效果, 执行完git的命令后, 会下载仓库内容至本地,并存放在一个与仓库同名的文件夹内, 并可进行更多操作

提示

如果仓库叫TommyZeng/picgo, 文件夹名字就会叫picgo

建议找一个文件比较多的仓库fork(转存)到自己的GitHub中, 来练习基础的增删查改

# 1. 首先是执行克隆指令

警告

注意仓库链接在这里

git clone + "仓库链接"
1
1

# 2. 执行初始化指令, 生成与仓库的通讯链接

注意

这个步骤在已经建好GitHub仓库的情况下并没有必要, 是在GitHub上没有建仓时让用户可直接在本地建仓的一种办法

git init  #仓库初始化

1
2
1
2

会生成一个.git的隐藏文件,内部有包含与仓库通讯的文件, 要填写相关user信息, 可使用代码

git config --global user.name "xxx" #就是仓库名称斜杠前的id   配置用户名
git config --global user.email "xxx@xxx.com"              # 配置邮件
1
2
1
2

# 3. 增删查改的方法

通常完成上一步后, 就会下载到相当多的文件夹

删除文件的方法:

大多数文档里的方法是用下面这个代码一个个删除,说实话动的文件多了NM就离谱

git rm "文件名"	        #删除文件
git rm -r "文件夹名字"  #删除文件夹
1
2
1
2

# 批量删除/新建文件后同步至仓库

我们主要讲怎么批量删除/新建文件

步骤

第一步: 直接资源管理器(我的电脑)里删掉想要删除的文件, 或直接新建想要的文件 然后在git bash里输入git add .(注意.与add之间空一格)把改动添加到缓存 然后用git commit -m "clear"一次性全部删除

"引号里不一定要写clear, 任意字母都可以,但切记不能空着"

这是不是就不用一个个文件commit确认,特省事情

# 推送上传至仓库

提示

文件修改完后,用git push即可推送本地仓库至远程仓库即可

注意

网上有说第一次推送仓库的时候好像得用这行代码的, 2022/04/02测试了几个仓库,都不用执行这步,可忽略

git push -u origin main #第一次推送main分支时使用-u指令
git push origin main
1
2
1
2

做到这一步会不会对这个图理解更深了?

workspace: 本地工作区 staging area: 缓存区/暂存区 local repository: 本地仓库 remote repository: 远程仓库

用一张图来表达就是

# 4.下载仓库内容至本地

警告

下载仓库内容到本地使用代码

git pull origin main # 获取远程分支main并合并到当前分支
1
1

注意一定时main分支, GitHub在2020年把主分支从默认的main改成了main

完成后即可按上面的增删步骤管理仓库内容

# 避坑

网上很多帖子会查出各种命令如

git add -A . #这个实测没啥用" ."就可以了

递归删除法(删除全部文件)
git rm xxx                                                # 删除index中的文件
git rm -r *   # 递归删除文件(可全删)      

git commit -m 'add more files'一次提交所有文件

git status 	#告知你文件情况
git commit -m 'first commit'
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10

这些命令基本都能用, 不过有些杂乱,且让人晕头转向, 不用太在意这些




# 第二部分:Git连接Github

两者通信依赖SSH或者HTTP进行连接,SSH是电脑长期连接拉去数据时最方便的方案,操作流程如下:

# 一、 生成 SSH 密钥

# 1. 打开终端

  • 在 Mac 或 Linux 上,你可以直接打开 Terminal 应用程序。
  • 在 Windows 上,你可以使用 PowerShell 或者如果安装了 Git,可以使用 Git Bash。

# 2. 运行 SSH 密钥生成命令

  • 在终端中,输入以下命令来生成一个新的 SSH 密钥:

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    
    1
    1
    • ssh-keygen 是用于生成 SSH 密钥的命令。
    • -t rsa 指定密钥类型为 RSA,这是一种常用的密钥算法。
    • -b 4096 指定密钥长度为 4096 位,这比默认的 2048 位更安全。
    • -C 后面跟的是一个注释,通常是你的邮箱地址,用于帮助你识别这个密钥。这个邮箱应该是你的 GitHub 注册邮箱。

# 3. 指定密钥保存位置

  • 当运行上述命令后,系统会询问你保存密钥的位置。如果你接受默认位置(通常是 ~/.ssh/id_rsa),直接按回车即可。如果你已经有了一个 SSH 密钥,系统会提示你是否要覆盖它。如果不想覆盖,可以输入一个新的文件名。

# 4. 设置密钥密码

  • 接下来,系统会提示你输入一个密码(passphrase)。这是一个可选步骤,但为了增加安全性,建议设置一个密码。
  • 这个密码每次使用这个密钥时都会被要求输入,可以防止未经授权的用户使用你的密钥。
  • 输入密码后,系统会要求你再次确认。

完成这些步骤后,你的新电脑上就会生成一个新的 SSH 密钥对。接下来,你需要将生成的公钥(.pub 文件)添加到你的 GitHub 账户中,这样 GitHub 就可以识别并信任从你的新电脑发出的 SSH 连接请求了。

在 SSH 密钥生成过程中,当系统提示你输入密钥密码(passphrase)时,你可能注意到在输入时看不到任何反馈(例如星号或点),这是正常的。SSH 密钥生成工具为了安全考虑,不会在终端显示密码字符。即使你看不到输入的内容,你的输入是有效的。以下是这一步骤的详细说明:

# 输入 SSH 密钥密码

  1. 输入密码时无可视反馈:

    • 当系统提示你输入密码时,即使你在键盘上输入,终端也不会显示任何字符。这是为了防止旁观者看到密码长度或模式。
    • 正常输入你的密码即可,即使看不到任何字符变化。
  2. 确认密码:

    • 输入完密码后,按下回车键。然后,系统会要求你再次输入密码以进行确认。
    • 同样,在输入确认密码时,你也不会在终端看到任何可视反馈。
    • 再次输入相同的密码,并按回车键。
  3. 完成密钥生成:

    • 如果两次输入的密码相同,系统就会生成 SSH 密钥,并保存到指定的文件中。
    • 你会看到一条消息,确认你的公钥和私钥的保存位置,以及一个随机生成的图案,表示你的密钥的指纹。

# 后续步骤

  • 检查密钥:完成密钥生成后,你可以在指定的目录(通常是 ~/.ssh)下找到两个文件:一个是私钥(例如 id_rsa),另一个是公钥(例如 id_rsa.pub)。
  • 添加公钥到 GitHub:将公钥(.pub 文件的内容)添加到你的 GitHub 账户中,以便 GitHub 可以识别你的新设备。

记住,私钥是非常敏感的,必须保持安全,不要分享或发送给任何人。公钥是可以安全分享的部分,用于在服务如 GitHub 上进行身份验证。


# 二、复制 SSH 公钥

首先,你需要复制你刚生成的 SSH 公钥(.pub 文件)的内容。假设你使用的是默认的文件名和位置,你的公钥文件将是 ~/.ssh/id_rsa.pub。你可以使用下面的命令来快速复制公钥内容到剪贴板:

  • 在 macOS 或 Linux 上:

    cat ~/.ssh/id_rsa.pub | pbcopy
    
    1
    1

    (如果 pbcopy 不可用,你可以手动打开该文件并复制内容)

  • 在 Windows 上使用 Git Bash:

    cat ~/.ssh/id_rsa.pub | clip
    
    1
    1

# 三、添加 SSH 公钥到 GitHub

然后,将复制的公钥添加到你的 GitHub 账户:

  1. 登录到你的 GitHub 账户。
  2. 打开设置:点击右上角的头像,然后选择“Settings”(设置)。
  3. 添加 SSH 密钥:
    • 在设置页面的侧边栏中,点击“SSH and GPG keys”。
    • 点击“New SSH key”或“Add SSH key”按钮。
    • 在“Title”字段中,给你的密钥一个容易识别的名称。这个名称是为了帮助你以后记住这个密钥是用在哪台电脑上的。
    • 在“Key”字段中,粘贴你之前复制的公钥。
    • 点击“Add SSH key”来保存新的密钥。

# 四、 测试 SSH 连接

完成公钥添加后,测试一下是否能够通过 SSH 连接到 GitHub:

  • 打开终端或 Git Bash。
  • 输入以下命令:
    ssh -T git@github.com
    
    1
    1
  • 如果是第一次连接 GitHub,可能会看到一个关于服务器身份的警告。输入 yes 继续。
  • 如果一切设置正确,你将看到一条欢迎信息,如:“Hi [username]! You've successfully authenticated, but GitHub does not provide shell access.”

这个欢迎信息表示 SSH 设置正确,并且你已经成功地通过 SSH 连接到了 GitHub。


# 五、开始使用 SSH 进行 Git 操作

一旦 SSH 设置完成,你就可以开始使用 SSH 进行 Git 操作了,例如克隆、推送或拉取仓库。使用 SSH URL 而不是 HTTPS URL 来克隆或操作你的仓库。

例如,克隆仓库的命令将类似于:

git clone git@github.com:username/repo.git
1
1

这些步骤确保了你可以安全地通过 SSH 与你的 GitHub 仓库交互。


# 常见问题解决

# 无法连接服务的解决方法

这部分如果是长期连接会用到SSH,这里有个坑是git的代理设置不对导致没有走上网的端口导致连不上,对应的报错代码如下:

Failed to connect to github.com port 443 after 21111 ms: Couldn't connect to server
1
1

如出现类似问题,可以试着用以下的代码,大概率可以解决。

git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
1
2
1
2



# 实战操作案例——Git分支推送历史功能

更新出现异常解决办法

因为很喜欢给博客添加新功能,但又很容易出现不明bug,应该充分利用Git的定档备份功能,出现问题后及时回滚

显示分支提交命令,会显示出提交历史,和提交代码

git log  #退出按Q即可
1
1

研究git checkout和git reset的区别,以及两者在操作上的区别

# 实战操作方法


# 情况一:修改提交了commit且push

方法一:

git reset --hard HEAD^ #一个^代表一个版本,倒退^^两个版本,~100=回退100个版本
git reset --hard id #回退到指定的id码
1
2
1
2

这个方法不推荐,因为会直接覆盖掉回退前的记录。(虽然不是真的删了)

1 --> 2 –> 3 直接变成 1 –> 2

这个时候再PUSH会提示线上版本比线下版本新,所以的强制提交

git push -f #强制提交
1
1

方法二:

git revert commit_id #用log里的版本号完全替代掉commit_id这几个字符
1
1

该命令意思是撤销,但保留提交记录

1 --> 2 –> 3 变成 1 –> 2 --> 3 –>4 将回退到2但以2作为主体新建新的4号commit

注意: 操作中commit_id应写需要被移除的版本号,而上面reset则是输入要去到的版本号

输入完成后会进入和git commit --amend一样的界面,用I进入输入模式,在revert “”的冒号里输入更新的名称,输入:wq回车退出。

revert命令可以直接push,不需要担心push不上去,因为是新建的commit,不会出现线上版本比线下版本好的报错。


# 情况二:修改并提交了,但没有push

  1. git reset --soft #撤销commit
    
    1
    1
  2. git reset --mixed 撤销commit和add两个动作
    
    1
    1

以上两个办法都不会真正删除文件,Git中依旧可以查找出并还原,方便在各个版本间穿梭

查看完整提交历史

git reflog 
1
1

# 0924分支推送记录

当天由于更新出了bug,需要回滚到之前的版本,出现了很多问题,最核心的问题是

  • 回滚后无法提交git push。

  • 回退版本的reset和revert指令都不好用

  • git commit --amend指令很难用(其实是看错了操作方法)

# Git操作收获——commit --amend

git commit --amend #修改提交信息(用于修改最近一次提交的提交信息)
1
1

该模式下默认会显示很多行带注释的操作说明,按键盘I健即可进入编辑模式,键盘上下键确定输入位置

进入编辑模式:

小写i:在光标所在行位置停止不动开始写入内容

大写I:在光标所在行行首开始写入内容

小写a:在光标所在行当前字符后开始写入内容

大写A:在光标所在行行尾开始写入内容

小写o:在光标所在行下一行开始写入内容

大写O:在光标所在行上一行开始写入内容

退出编辑模式:

:w:保存文本

:q:退出编辑模式

:w!:强制保存,在root用户下即使文本只读也可以强制保存

:q!:强制退出,所有改动不生效

:wq:保存并退出

以上操作一定要记住,:号也是命令的一部分,退不出来是因为把冒号忘记了

操作参考git commit --amend 以及退出 vim 编辑器_vmespmvk的博客-CSDN博客 (opens new window)

# 0925分之推送报错——commit未出分支上,需要把commit重回分支

今天继续更新了一些网站样式,但由于中途好奇,用git checkout到了昨天上传出bug的那个版本,然后又checkout回去继续修改。一切修改完成后,commit成功,但push时报错如下

TommyZeng@TommyLaptop MINGW64 /c/Tommy/DevProjectLocal/Blog-Vuepress (master|REBASE 2/3)
$ git push
fatal: You are not currently on a branch.
To push the history leading to the current (detached HEAD)
state now, use

    git push origin HEAD:<name-of-remote-branch>
1
2
3
4
5
6
7
1
2
3
4
5
6
7

究其原因,根据可查资料,显示当你在进行checkout时提供了一个commit而不是分支名称,你就进入了一种“特殊”的状态里 —— detached HEAD。

可能发生的问题:

Git中的HEAD指针能确定您当前的工作版本(以及放置在项目工作目录中的文件)。通常,当检出正确的分支名称时,Git会在您创建新提交时自动移动HEAD指针。您将自动进入所选分支的最新提交。

当您选择通过commit哈希值进行checkout时,Git将不会为您执行此操作。结果是,当您进行更改并提交它们时,这些更改将不属于任何分支。

# 解决方法

问题分析:出现该错误的原因是因为checkout导致的HEAD指向了非master的仓库,导致push异常。

可以先讲目前更改的commit放入一个临时分支里,然后切换至master分支,再使用命令和临时分支合并(merge)

先查看下目前的commit列表

43c3519 (HEAD) HEAD@{0}: commit: 新版字体优化合并分支 #新建一个临时分支
ffa0c06 (HEAD) HEAD@{0}: commit: 新版界面字体优化——大改
b1432cb (master) HEAD@{1}: checkout: moving from b82a384012a1a07d083ed8afa0139bb87f98a2e1 to b1432cb 
b82a384 HEAD@{2}: checkout: moving from master to b82a384
b1432cb (master) HEAD@{3}: commit: 更新了新翻译的部分
95021cc (origin/master, origin/HEAD) HEAD@{4}: commit: 女王文章翻译更新
1
2
3
4
5
6
1
2
3
4
5
6

**步骤一:**选取需要的分支名称43c3519,为其简历temp分支

git branch temp 43c3519 
1
1

**步骤二:**切换至master主分支上(此时发现前面commit的更改都消失了)

git checkout master
1
1

**步骤三:**将temp的分之内容merge合并到master,master就出现了新改动的代码

git merge temp
1
1

完成以上步骤后即可正常推送,恢复正常

记得完成后删除temp分支,防止出现奇怪问题,删除方法

git branch -d temp
1
1

# 0926分支回退并重新push操作调研

前提:在完成开发后,发现出现不明bug,想回退到初始版本,并push到github,看看是不是玄学bug。

这里面的核心问题是,github-action自动部署与本地部署的效果不一致,一个叫banner-arrow的动态箭头元素竟然无法渲染出正确的位置和动画(action的版本)。

重命名分支操作

git branch -m master old-master #把master改名为old-master
1
1

强制推送至某分支

git push origin develop:master -f #强制将develop分支推送至master分支
1
1

但是还是无法改变原有的master分支,最后还是reset解决的

  1. 先切换至master分支
git reset --hard 要与master合并的分支
1
1

提示

最后研究了一圈发现,可能还是reset最好用,虽然会破坏记录,但是reflog记录并不会消失




# 常用Git代码分享

图稍微有一点模糊,不过不影响,该图忘记是哪位大佬做的了,非常全面,有需要的可以自行下载

在线编辑 (opens new window)
#Git
最近编辑时间: 2024/01/26 15:54:02
加快国内访问Github Pages速度的方法
PicGo图床配置经验总结

← 加快国内访问Github Pages速度的方法 PicGo图床配置经验总结→

最近更新
01
本站维护方法(防止遗忘)
01-27
02
Speaking Corpus
04-28
03
Speaking Reference
04-24
更多文章>
Theme by Vdoing | Copyright © 2021-2025 | 备案信息:10086号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式