Skip to content

Git&GitHub

基本概念

分布式/集中式版本管理

版本管理:顾名思义,用于个人/团队级别代码管理,主要是记录更改

关键概念:仓库(Repository)、提交(Commit)、分支(Branch)、合并(Merge)、冲突(Conflict)、标签(Tag)

github:理解成云端(== 百度云),通过git上传,上传内容主要是代码

版本退回

廖雪峰教程

原理:指针操作

alt text

git log
git log --pretty=oneline
git reset --hard <id>
git reset --hard HEAD^n  # n是退几步
git reflog

工作区/暂存区

工作(目录)有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

  • 其中包含暂存区、分支(默认有一个main)

把文件往Git版本库里添加

  • 第一步是用 git add 把文件添加进去,是把文件修改添加到暂存区;

  • 第二步是用 git commit 提交更改,是把暂存区的所有内容提交到当前分支。

alt text alt text

git checkout -- file

两种情况:

  • 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

  • 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

就是让这个文件回到最近一次git commit或git add时的状态。

删除文件

远程仓库

使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。

分支管理

多人协作

  1. 首先,可以尝试用 git push origin <branch-name> 推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用 git push origin <branch-name> 推送就能成功!

当然!这里帮你整理了一份 GitHub CLI (gh) 常用命令速查表,方便你快速使用和参考:


GitHub CLI (gh) 常用命令速查表

1. 认证和账户

命令 说明 示例
gh auth login 登录 GitHub gh auth login
gh auth logout 登出 GitHub gh auth logout
gh auth status 查看当前认证状态 gh auth status
gh api 直接调用 GitHub API gh api repos/octocat/hello-world

2. 仓库管理

命令 说明 示例
gh repo clone <repo> 克隆仓库 gh repo clone octocat/hello-world
gh repo create 创建新仓库(交互式) gh repo create
gh repo view 查看仓库详情 gh repo view
gh repo fork Fork 一个仓库 gh repo fork owner/repo

3. Pull Request(PR)管理

命令 说明 示例
gh pr create 创建 PR gh pr create
gh pr status 查看 PR 状态 gh pr status
gh pr list 列出 PR gh pr list
gh pr view <number> 查看指定 PR 详情 gh pr view 123
gh pr checkout <number> 切换到 PR 分支 gh pr checkout 123
gh pr merge <number> 合并 PR gh pr merge 123
gh pr close <number> 关闭 PR gh pr close 123

4. Issue 管理

命令 说明 示例
gh issue create 创建 Issue gh issue create
gh issue list 列出 Issue gh issue list
gh issue view <number> 查看指定 Issue 详情 gh issue view 456
gh issue close <number> 关闭 Issue gh issue close 456

5. GitHub Actions 工作流

命令 说明 示例
gh run list 查看工作流运行历史 gh run list
gh run view <run_id> 查看指定运行日志 gh run view 12345678
gh workflow list 查看工作流定义 gh workflow list
gh workflow run <id> 触发指定工作流 gh workflow run build.yml

6. 其他实用命令

命令 说明 示例
gh gist create <file> 创建 Gist gh gist create snippet.js
gh alias set 设置命令别名 gh alias set co pr checkout
gh help 查看帮助 gh help

小提示

  • 交互模式:很多命令(如 gh pr create)会自动进入交互式填写模式,非常方便。
  • 支持自动补全:在终端中输入 gh 后按 Tab 键,自动补全命令和参数。
  • gh --version:查看当前 CLI 版本。

如果你需要,我还能帮你写一个用 gh 快速创建 PR 或 Issue 的示范脚本!你想要吗?

杂项

文件大小限制

alt text

alt text

alt text

提交哈希值

在 Git 中,版本 ID(即提交哈希值)由 SHA-1 算法生成,表现为一个 40 位的十六进制字符串(例如 a1b2c3d4e5f6...)。

SHA-1算法流程

  1. 预处理
    - 将输入数据填充至长度满足 512位倍数 - 64位
    - 附加原始数据长度的二进制表示(64位)。

  2. 分块处理
    - 将填充后的数据分割为512位的块(Block)。

  3. 初始化哈希值
    - 设置5个32位的初始变量(H0-H4):

    H0 = 0x67452301  
    H1 = 0xEFCDAB89  
    H2 = 0x98BADCFE  
    H3 = 0x10325476  
    H4 = 0xC3D2E1F0
    

  4. 循环压缩函数
    - 对每个512位块进行80轮运算,更新中间哈希值。
    - 每轮使用非线性函数(如AND、OR、XOR)和常量值。

  5. 最终哈希
    - 合并所有块的中间结果,生成最终的160位哈希值。

示例

```bash # Linux/macOS

约 1324 个字 35 行代码 6 张图片 预计阅读时间 5 分钟

echo "hello" | openssl sha1 # 输出:aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d

# Windows PowerShell Get-FileHash -Algorithm SHA1 file.txt ```

SHA-256 算法原理与 SHA-1 的区别是位数多了

SHA-256 应用

  1. 数据完整性验证
  • 文件下载后校验哈希值,确保未被篡改。
    # Linux/macOS
    sha256sum file.iso
    # Windows PowerShell
    Get-FileHash -Algorithm SHA256 file.iso
    
  1. 数字签名
    - 用私钥对数据的SHA-256哈希值签名,公钥验证签名合法性。

  2. 区块链
    - 比特币使用SHA-256计算区块哈希和交易验证。

  3. 密码学协议
    - TLS 1.2/1.3、SSH、IPSec等协议依赖SHA-256保证通信安全。


使用SHA-256

1. 命令行工具

  • Linux/macOS
    echo "hello" | sha256sum          # 计算字符串哈希
    sha256sum file.txt               # 计算文件哈希
    
  • Windows PowerShell
    Get-FileHash -Path C:\file.txt -Algorithm SHA256
    

2. 编程示例(Python)

import hashlib

# 计算字符串的SHA-256哈希
text = "hello"
hash_object = hashlib.sha256(text.encode())
hex_dig = hash_object.hexdigest()
print(hex_dig)  # 输出:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

# 计算文件的SHA-256哈希
def hash_file(filepath):
    sha256 = hashlib.sha256()
    with open(filepath, "rb") as f:
        while chunk := f.read(4096):
            sha256.update(chunk)
    return sha256.hexdigest()

print(hash_file("data.txt"))

3. 在线工具

颜色主题调整