GitGithub相关(自用,持续更新update 8/23)
文章目录
- Git常见命令
- 1. 推送空提交
- 2. 提交Clean-PR
- 3. 回退add操作
- 4. 交互式rebase
- 4.1 切换模式
- 4.2 保存与退出
- 4.3 注意Rebase
- 5. 合并多个commit
- 问题一:Clone Github报错The TLS connection was non-properly terminated.
- TLS握手
- 报错原因
- 解决
- 问题二:Failed to connect to 127.0.0.1 port 7890 after 2030 ms: Couldn't connect to server
- Github相关
- 1. GIthub中的一些缩写 LGTM !
- 2. Issue中的一些 Highlight
Git常见命令
太常见的四件套 clone、pull、commit、push
就不说了。
1. 推送空提交
git commit --allow-empty -m "Empty-Commit"
然后push一下就OK了。
Q: why空提交?
A: 因为对于Github上面需要CI的项目,检查流水线或者是CLA协议卡住了。第一种方法是手动重新构建流水线然后同时构建分支流水线。但是如果无法手动启动构建,那么唯一的构建方法就是使用 Git。这时候你不需要做任何修改,只需要构建项目,所以需要推送一个空的提交来启动构建。
2. 提交Clean-PR
【注意】 这是为了很大型项目开发过程中,覆盖远程旧分支以保持干净的commit历史,方便Review,但是此操作仅适用于个人分支,用在主分支的时候务必小心!!!
-
添加上游仓库并同步最新代码
git remote add upstream https://github.com/Echo-Nie/Demo.git git fetch upstream develop
-
基于上游的develop创建新分支
git checkout -b clean-PRtest upstream/develop
-
应用本地修改到新分支
-
方法一:Cherry-pick
我个人常用的是这个,首先找到localTest
分支的提交哈希
(使用git log localTest
查看),然后:git cherry-pick <hash>
-
方法二:合并修改内容
将localTest
的更改合并到clean-test
:git merge localTest --squash # 合并并压缩为一个提交 git commit -m "提交信息"
-
-
强制推送到远程test分支:
git push origin clean-test:test --force
3. 回退add操作
首先看看哪些文件加进去了
git status
回退git add所有文件:
git reset HEAD
回退部分文件:
git reset HEAD fileName
4. 交互式rebase
在使用 Git 进行交互式 rebase 时,您可能会用到 Vim 或类似的文本编辑器来修改提交历史。以下是详细的步骤和说明,帮助您理解如何在这种情况下使用 Vim 来进行操作。
4.1 切换模式
-
正常模式切换到插入模式:如果需要编辑文本内容(如更改提交信息),首先确保自己处于 Vim 的 Normal Mode 。如果不是,请按
Esc
键退出其他模式。然后按下i
键进入 Insert Mode 。此时, -
从可视模式或命令行模式切换到插入模式:
如果当前处于可视模式(Visual Mode)或命令行模式(Command-line Mode),请先按Esc
键返回到正常模式,然后再按i
、a
或o
等键进入插入模式。具体来说,i
:在光标所在位置前开始插入;a
:在光标所在位置后开始插入;o
:在当前行下方新开一行并进入插入模式。
4.2 保存与退出
-
保存更改:完成文本编辑后,按
Esc
键回到正常模式。要保存所做的更改而不退出 Vim 编辑器,请输入:w
并按回车键。 -
退出编辑器:若要退出编辑器但不保存更改,请输入
:q!
并按回车键(注意这会丢弃所有未保存的更改)。如果希望保存更改并退出,则输入:wq
或简写为:x
并按回车键。
4.3 注意Rebase
-
在成功保存并退出 Vim 编辑器后,根据您的操作,Git 可能会提示您继续 rebase 过程。这时,您需要运行
git rebase --continue
命令来完成整个 rebase 操作。此步骤可能需要重复多次,直到处理完所有的提交。 -
重要的是,在执行 rebase 操作之前,请确保理解 rebase 对提交历史的影响,并确认它不会影响团队成员的工作流程。特别是当涉及到已推送至远程仓库的提交时,应格外小心,因为 rebase 会改变提交历史。
5. 合并多个commit
-
合并最近 nnn 个提交,n<=20n<=20n<=20:
git rebase -i HEAD~n
-
编辑提交列表:
-
在打开的文本中,将你想要合并的所有提交前的
pick
改为squash
或简写s
,除了第一个提交保持pick
不变。pick abcdefg 提交信息1 squash hijklmn 提交信息2 squash opqrstu 提交信息3
-
-
保存并退出编辑器(Vim为例:按
Esc
, 输入:wq
, 按回车)。 -
编辑合并后的提交信息:
Git会再次打开编辑器让你编辑新的合并提交的信息。编辑后,再次保存并退出。 -
强制推送更新(如果已推送到远程仓库):
git push origin lcoal-branch:develop --force
git push origin lcoal-branch:develop --f
强制推送会覆盖远程仓库的历史,所以如果其他人也在基于这些提交工作,可能会导致冲突。
问题一:Clone Github报错The TLS connection was non-properly terminated.
最近在服务器上跑代码,clone Github代码报错
GnuTLS recv error (-110): The TLS connection was non-properly terminated.
TLS握手
TLS(Transport Layer Security,传输层安全协议)握手是建立安全网络连接的关键步骤。在Git通过HTTPS协议与远程仓库通信时,TLS握手的主要目的是:验证服务器的身份,确保连接到的是合法的远程仓库;客户端和服务器协商生成会话密钥,用于后续的数据加密传输。
握手过程通常包括以下步骤:
- 客户端问候:客户端向服务器发送支持的TLS版本、加密算法等信息。
- 服务器问候:服务器选择一种加密算法,并返回自己的证书用于身份验证。
- 密钥交换:客户端和服务器根据选定的加密算法协商生成会话密钥。
- 完成握手:双方确认握手完成,开始使用会话密钥进行加密通信。
报错原因
当出现“gnutls_handshake() failed”错误时,说明在TLS握手过程中出现了问题,导致无法建立安全连接。以下是几种常见原因:
1.代理设置问题
如果之前设置了代理,但当前网络环境不需要代理,或者代理配置不正确,可能会干扰Git与远程仓库的直接通信,导致TLS握手失败。Git在尝试通过代理连接时,可能无法正确处理握手过程中的数据包,从而引发错误。
2. Git版本问题
旧版本的Git可能存在兼容性问题,导致与服务器的TLS握手出现异常。例如,某些版本的Git使用GnuTLS库进行加密传输,在特殊情况下(如使用了代理服务器)可能出现握手失败的问题。
3. SSL证书问题
本地SSL证书过期或不受信任,会导致服务器的SSL证书无法通过客户端的验证。这可能是由于证书颁发机构(CA)的证书未正确安装,或者证书本身存在问题。
解决
清除代理设置
清除Git的代理配置,使Git能够直接与远程仓库建立连接,避免代理设置导致的握手问题:
git config --global --unset https.https://github.com.proxy
git config --global --unset http.https://github.com.proxy
更新Git版本
更新Git到最新版本,以确保使用的是经过优化和修复的版本,避免因旧版本的兼容性问题导致握手失败。在Linux系统上,可以通过包管理器(如apt-get
)更新Git。
我清除代理之后就OK了。
问题二:Failed to connect to 127.0.0.1 port 7890 after 2030 ms: Couldn’t connect to server
git config --global --unset http.proxy
git config --global --unset https.proxy
Github相关
1. GIthub中的一些缩写 LGTM !
最近经常看到一些迷之缩写,感觉挺有意思的,但是有时候看到一些没见过的缩写还是有点懵逼,不过缩写确实也是很方便去review,这里就记录汇总一下;顺便加了一些git的基操单词(加粗的是我遇到比较多的)。
参考:
https://blog.csdn.net/liwenlong_only/article/details/104004928
https://blog.csdn.net/misayaaaaa/article/details/102684348
https://github.com/orgs/community/discussions/16925
缩写 | 含义 | 说明 |
---|---|---|
PR | Pull Request | 拉取请求,用于向其他项目提交代码 |
LGTM | Looks Good To Me | 代码已经过review,可以合并 |
SGTM | Sounds Good To Me | 与LGTM意思相近,表示通过了review |
WIP | Work In Progress | 如果你有个改动很大的 PR,可以在写了一部分的情况下先提交,然后在标题里写上 WIP,以告诉项目维护者这个功能还未完成,方便提前 review 部分已经写好的代码 |
PTAL | Please Take A Look | 你过来瞅瞅? |
TBR | To Be Reviewed | 提示维护者进行review |
TL;DR | Too Long; Didn’t Read | 太长懒得看,通常用于文档的简略描述前 |
TBD | To Be Done/Defined/Discussed/Decided/Determined | 根据语境不同意义有所区别,但一般都是还没搞定的意思 |
BTW | By The Way | 顺便说一下 |
FYI | For Your Information | 供你参考 |
CC | Carbon Copy | 抄送,用于提及某人以便其了解相关信息 |
API | Application Programming Interface | 应用程序编程接口 |
CI/CD | Continuous Integration/Continuous Deployment | 持续集成/持续部署 |
CR | Code Review | 代码审查 |
Doc | Document | 文档 |
Fork | 创建一个项目的副本到自己的账户下 | |
Repo | Repository | 存储代码和其他资源的仓库 |
HEAD | 指向当前检出分支的最新提交 | |
Merge | 将一个分支的更改合并到另一个分支中 | |
Rebase | 将一系列提交应用到另一个基础分支上,通常用于整理提交历史 | |
Issue | 用户报告的问题或者待办事项,可以是Bug报告、功能请求等 | |
Label | 用来标记Issues或PRs的分类标签,帮助组织和跟踪任务 | |
RFC | Request For Comments | 请求意见稿,一般是一个Markdown文件 |
2. Issue中的一些 Highlight
> [!NOTE]
> Highlights information that users should take into account, even when skimming.> [!TIP]
> Optional information to help a user be more successful.> [!IMPORTANT]
> Crucial information necessary for users to succeed.> [!WARNING]
> Critical content demanding immediate user attention due to potential risks.> [!CAUTION]
> Negative potential consequences of an action.