跳转至

Git

Git 简介

什么是Git?

  • 分布式版本控制系统(DVCS,Distributed Version Control System)
    • 分布式:无需联网,在自己的机器上即可使用
    • 版本控制:记录、管理、回溯文件修改历史
  • 官网: https://git-scm.com/
Install Git
  • Linux / WSL
    sudo apt install git
    

Git 模型

Git 模型

转载自Tonycrane前辈的Git辅学

Git 基础配置

  • 创建本地 git 版本库

    • git init 创建.git文件夹,让 当前文件夹 变成git仓库
    • git init folder 创建一个新的文件夹 并初始化为git仓库
  • git账号配置

    多人合作时可以区分用户 + 便于 Github 识别

    • 全局配置
      • git config --global user.name "<your name>"
      • git config --global user.email "<your email>"
    • 针对某一版本库专门设置 (不加 --global 即可)
      • git config user.name "<your name>"
      • git config user.email "<your email>"

git config --list 验证配置是否成功

Git 基础用法

model-add

文件暂存

  • 暂存区:已经修改、等待后续提交的文件
  • git 指令
  • 将文件加入暂存区

    • git add file/folder 把单个文件加入暂存区

    • git add . 把所有文件加入暂存区

    只会添加修改过的文件

  • 删除文件

    rm # 只在本地删除版本库中不存在的文件
    git rm   (先rm再add) # 同时删除本地和版本库中的文件
    git rm --cached # 将一个已暂存的新文件取消暂存
    
    git mv (等价于mv + git rm + git add) # 重命名文件
    git status # 查看当前工作区和暂存区状态
    

  • 文件三种类别

    1. Untracked 未跟踪
    2. Tracked 已追踪
    3. Ignored 被忽略
关于 .gitignore
  • 存放在版本库根目录下,规定git忽略哪些文件

    提交前先配置好 .gitignore,避免提交无用文件

    语法

    # 注释
    * 通配多个字符 → *.c 匹配所有.c文件
    ** 通配中间目录(有或无) → a/**/b 匹配 a/b、a/x/b、a/x/y/b 等
    / 开头只匹配根目录,否则匹配所有目录 取消忽略

    1. /(路径定位符)
      • 在末尾(例如 dist/):只忽略文件夹 只匹配名叫 dist 的目录及其里面的所有内容
      • 在开头(例如 /node_modules):仅限当前目录 只忽略与 .gitignore 文件同级目录下的 node_modules
      • 没有斜杠(例如 node_modules):全局匹配 Git 会在这个项目的任何层级寻找名字叫node_modules 的文件或文件夹并忽略掉
    2. *(通配符)

      *.log :忽略所有以 .log 结尾的文件(例如 error.log、debug.log)

      temp-* :忽略所有以 temp- 开头的文件或文件夹(例如 temp-1、temp-data)

      ** :匹配任意级别的目录。例如 logs//*.log 意思是忽略 logs 文件夹下所有的 .log 文件

    3. !(豁免权 / 反转规则) 配合使用:

      # 第一步:先忽略所有的 log 文件
      *.log
      # 第二步:但是豁免 server.log,把它加入版本控制
      !server.log 
      

    详见 Git - gitignore Documentation

  • 查看某个文件是否被忽略,以及其匹配规则 git check-ignore -v <file>

  • 常用语言的 .gitignore 模板:github/gitignore

提交更改

model-commit

  • 将暂存内容提交到本地仓库,生成一个新节点

    # 默认编辑器编辑提交信息
    git commit
    
    git commit -m "message"
    git commit -a / git commit --all # 自动暂存所有更改的文件
    

  • 查看提交历史

    git log --oneline  # 每一个提交一行
    git log --graph  # 显示分支结构
    git log --stat  # 显示文件删改信息
    git log -p  # 显示详细的修改内容
    

  • 每个提交都有一个唯一的 sha-1 标识符(40 位十六进制数)

    git show <id> # 显示提交详细信息(id 在不重复前提下可以只写前几位)
    git checkout <id> # 检出之前的某一版本
    

关于 commit message

  • 记录更改的原因 / 内容,方便定位 / 回溯(特别是合作项目)

关于 版本

detached HEAD 问题

分支相关

  • 创建分支
    git branch <name> # 基于当前 HEAD
    git branch <name id> # 基于 id 提交
    
  • 查看分支
    git branch # 带 -a 显示远程分支)
    git show-branch # 更详细
    
  • 切换分支
    git checkout <name>
    git checkout -b <name> # 创建并切换
    
  • 内容比较
    git diff branch1 branch2 # 比较两个分支
    git diff branch # 比较工作区和分支
    git diff # 比较工作区和暂存区
    

合并相关

git merge

修改历史

为git配置代理

wsl网络问题解决

  1. .wslconfig
  2. 为 Git 配置代理
# 设置 HTTP 和 HTTPS 代理
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy