深海 深海
首页
  • 随手笔录
  • 电影
  • 音乐
  • 书籍
汇总
面试
  • 开发工具
  • VScode插件
  • Git
  • Mac时代
  • 前端工具
  • Chrome
  • HTML
  • CSS
  • Javascript
  • Typescript
  • Axios
  • 框架

    • Vue
    • uni-app
  • Nginx
  • Linuk
事例
关于

深海

人生如逆旅,我亦是行人
首页
  • 随手笔录
  • 电影
  • 音乐
  • 书籍
汇总
面试
  • 开发工具
  • VScode插件
  • Git
  • Mac时代
  • 前端工具
  • Chrome
  • HTML
  • CSS
  • Javascript
  • Typescript
  • Axios
  • 框架

    • Vue
    • uni-app
  • Nginx
  • Linuk
事例
关于
  • 开发工具
  • Vscode插件
  • Git
    • git 是什么
    • 安装
    • 基础配置
    • 配置远程仓库 ssh
    • 基本使用
      • 初始化仓库
      • 查看提交日志
      • 版本回退
      • 强制操作
      • 忽略文件
      • 配别名
      • 版本标签管理
      • 分支
      • 远程仓库
      • 关联远程仓库
      • 重命名远程仓库
      • 拉取远程仓库
      • 配置多个远程仓库
      • 解决合并冲突
      • 单独文件不执行合并
    • hooks 钩子
  • Mac时代
  • 前端工具

  • 效率工具

  • Chrome
  • 工具
深海
2023-02-01
目录

Git

# git 是什么

Git 是一个版本控制系统,用于跟踪计算机文件的变化并协作开发代码。它可以记录每个文件的修改历史,帮助多人协作开发并处理代码冲突,以及管理不同版本的代码库。Git 是一个自由开源软件,由 Linus Torvalds 在 2005 年创建。

官网 (opens new window) 文档 (opens new window)

  • git 优势

    • 适合分布式开发,强调个体。
    • 速度快、灵活。
    • 任意两个开发者之间可以很容易的解决冲突。
    • 采用分布式存储方式,不需要服务器就可以运行。
  • 版本控制工具

    1. 集中式版本控制工具: SVN
    2. 分布式版本控制工具: Git
    • 区别
      • 集中式依赖于远程服务器,在没有网络的情况下无法提交
      • 所有开发者都共享一个远程服务器
      • 分布式直接进行本地存储,不依赖与远程服务器(可有可无)
      • 没有网络的情况下,也可以工作,有网了,将本地修改内容全部提交到远程服务器

# 安装

  • Mac
    • Homebrew 安装
    • 下载 Git 安装包 安装 (opens new window)
  • Windows
    • 下载 Git 安装包 安装 (opens new window)

# 基础配置

# 配置用户名
git config --global user.name "用户名"
# 配置邮箱
git config --global user.email "邮箱地址"
# 查看配置信息
git config --list
1
2
3
4
5
6

# 配置远程仓库 ssh

  • Mac
# 1.检查.ssh文件夹是否存在
ls -al ~/.ssh
# 2.如果不存在新建.ssh文件
mkdir ~/.ssh
# 3.生成公钥
# 系统提示输入文件保存位置等信息,连续按三次回车即可,注意叫输入密码的时候,
# 连续enter就行。不然输入密码后后面拉文件每次都需要输密码麻烦。当然需要设置密码的话那就自己设置下,不需要就enter继续就行
cd ~/.ssh
ssh-keygen -t rsa -C "email@example.com"
# 4.查看公钥
cat ~/.ssh/id_rsa.pub
1
2
3
4
5
6
7
8
9
10
11
  • Windows
# 1.打开到git base窗口进入.ssh目录
cd ~/.ssh
# 2.查看公钥
cat id_rsa.pub
# 3.若没有公钥时输入ssh-keygen直接回车即可
ssh-keygen
# 提交代码出现密码错误问题
若gitee密码更换了,所以需要重新设置密码
控制面板 > 管理凭证 > window凭证 更改最新的gitee账号密码就行
1
2
3
4
5
6
7
8
9

# 基本使用

# 初始化仓库

  • 命令 git init
  • 作用 使用 Git 管理项目的初始化操作,会创建一个名为.git的隐藏目录

    find . -name ".git" | xargs rm -Rf rm -rf .git 删除.git 文件

git 目录

hooks       //目录包含客户端或服务端的钩子脚本
info        //包含一个全局性排除文件
logs        //保存的日志信息
objects     //目录存储所有数据内容
refs        //目录存储指向数据(分支)的提交对象的指针
config      //文件包含项目特有的配置选项
description //用来显示对仓库的描述信息
HEAD        //文件指示目前被检出的分支
index       //文件保存暂存区信息
它是 Git 用来保存元数据和对象数据库的地方。
该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。
1
2
3
4
5
6
7
8
9
10
11

# 查看提交日志

git log                      # 详细的提交信息
git log --oneline            # 简洁的日志信息
git log --oneline -n 10      # 查看最近的10条消息
git reflog                   # 查看所有提交变更操作
git log --author='name'      # 查看该提交人的提交信息
git log -p [文件名称]         # 查看该文件前后的变化
git log --oneline --graph    # 查看版本路线
1
2
3
4
5
6
7

# 版本回退

git reflog                        # 查看历史提交版本
git reset --hard [版本号]          # 回退到某一版本
git reset --hard origin/master    # 强制拉取maser代码
git reset --hard head~1
    # ~1 表示回到上一次提交
    # ~2 表示上上一次提交
    # ~0 表示当前提交
git commit --amend                # 修改最后的一次commit 键入 i 即可编辑,然后esc退出,:wq,退出该文件并保存
git reset HEAD [文件名]            # 暂存区中撤销出来
1
2
3
4
5
6
7
8
9

# 强制操作

# 强制提交
git push -u origin master -f
git push  -f
# 强制拉取
git fetch -all                  # 从远程仓库下载最新版本
git reset --hard origin/master  # 将本地设为刚获取的最新的内容
1
2
3
4
5
6

# 忽略文件

忽略一些不需要被 git 管理的文件

# 1 在与 .git 隐藏目录同级的目录中创建 `.gitignore` 文件
# 2 打开 .gitignore 文件,加入忽略文件,例如:/test.html
# 3 路径是相对于当前 .gitignore文件 的路径
# 使用 `*` 表示通配符,匹配所有文件,例如:`/css/*.css`
路径写法:
/css/a.css
/css/*.css
/a.html
#忽略 build/ 目录下的所有文件
build/
1
2
3
4
5
6
7
8
9
10

# 配别名

git 提供了一种自定义字符串来替代长字符命令的方式,它就是 alias,这个单词是别名的意思

# git br 代表 git branch (全局别名)
git config --global alias.co checkout
git config --global alias.br branch
# 查看所设置的别名
cat ~/.gitconfig
# 删除别名
# 英文模式下,键盘按下dd删除光标所在行的内容,然后输入:wq保存配置文件即可
vim ~/.gitconfig

# 设置仅当前仓库生效的别名 进入当前仓库中执行
git config alias.pushall '!git push github main && git push gitee main'
# 查看当前仓库的别名
git config --local --get-regexp alias

1
2
3
4
5
6
7
8
9
10
11
12
13
14
配置方式 生效范围 配置文件位置
git config --global 所有 Git 仓库 ~/.gitconfig
git config 仅当前仓库 ./.git/config

# 版本标签管理

使用 tag 标签对重要版本进行标记

版本号格式:X.Y.Z(主版本号,次版本号,补丁版本号)

# 创建tag
git tag -a [tag_name] -m "提交信息"   # -a指定标签名,-m是提交信息(尽量需要)
git tag -a [tag_name] [commit] -m "提交信息"
git tag v1.0 [commit]               # 为45aff4a这个打上tab
# 查看tag
git tag
git show [tag_name]  # 查看某一个tag的详情
# 提交tag
git push origin [tag_name] # 将tab推送到远程仓库
# 切换tag
git checkout [tag_name]
git reset --hard [tag_name]
# 删除tag
git tag -d [tag_name]                 # 本地删除
git push origin :refs/tags/[tag_name] # 删除远程仓库中的标签
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

具体流程

dev 开发主分支,master 发版分支,release 打 tag 分支

  • 切换到有 bug 的 tag 标签
  • 新建 bugfix 标签进行修复,推送测试环境进行测试
  • 测试通过后切换分支 release 进行打标签,推动标签到远程
  • 合并到 master 分支,进行发版

# 分支

  • 查看分支
    git branch  # 查看当前分支
    git branch -avv  # 查看当前所有分支
    git branch -av
    git remote -v  # 查看远程库信息
    git rev-parse --show-toplevel # 查看当前所在的 Git 仓库路径
    git config --list --local  # 查看本地配置信息
    
    1
    2
    3
    4
    5
    6
  • 创建分支
    git branch [分支名称]        # 创建分支
    git checkout -b [分支名称]   # 创建分支并跳转到该分支
    
    1
    2
  • 删除分支
    git branch -d [分支名称]             # 删除分支
    o n g git branch -D [分支名称]             # 强制删除分支
    git push origin --delete [分支名称]  # 删除远程仓库上的分支
    
    1
    2
    3
  • 切换分支
    git checkout [分支名称]
    
    1
  • 分支覆盖
      git checkout develop           # 切换到要覆盖到分支
      git reset --hard origin/master # 将master分支覆盖到develop分支
      git push -f                    # 将本地分支强行推到远程分支
    
    1
    2
    3

# 远程仓库

# 关联远程仓库

# 1.在远程仓库中将本地的ssh公钥添加上
# 用origin关联远程仓库。若你要关联多个远程仓库,就要取不同的名字了 `git remote add 别名 分支`
git remote add origin 远程仓库地址
# 查看所有远程分支
git branch -r
# 将本地代码推送到远程仓库
git push -u origin master
# 设置本地分支追踪远程分支 之后就可以直接使用`git push`提交代码
git push --set-upstream origin 分支名
git rm --cached [文件名]  # 从暂存区移除文件
1
2
3
4
5
6
7
8
9
10

# 重命名远程仓库

# origin → upstream
git remote rename origin upstream
1
2

# 拉取远程仓库

# 克隆仓库到本地
git clone [仓库地址] [自定义仓库名字]
# 获取远程仓库最新内容
git pull [仓库地址] [分支名称]
# 拉取dev远程分支并自动创建本地dev分支
git checkout -b dev origin/dev
# 若不指定远程分支,默认拉取master分支下的代码
git clone -b dev [仓库地址]
# -b 表示选择分支,dev 是分支名称,后面是仓库地址,这样就实现了远程分支指定的拉取。
1
2
3
4
5
6
7
8
9

# 配置多个远程仓库

  • 添加新的远程仓库

    • 使用 git remote add 命令,格式如下
    git remote add <远程名称> <仓库地址>
    # 添加一个gitee远程仓库
    git remote add gitee https://gitee.com/username/repo.git
    
    1
    2
    3
  • 查看所有远程仓库

    git remote -v
    # 输出示例:
    origin  https://github.com/username/repo.git (fetch)
    origin  https://github.com/username/repo.git (push)
    gitee   https://gitee.com/username/repo.git (fetch)
    gitee   https://gitee.com/username/repo.git (push)
    
    1
    2
    3
    4
    5
    6
  • 推送到指定远程仓库

    • 推送到默认远程(如 origin)
    git push origin main
    
    1
    • 推送到新增的远程(如 gitee)
    git push gitee main
    
    1
  • 推送到多个远程仓库

      # 推送 main 分支到两个远程
      git push github main && git push gitee main
      # 或者推送所有分支(慎用!)
      git push --all github && git push --all gitee
    
    1
    2
    3
    4
  • 修改或删除远程仓库

    • 修改远程地址
      git remote set-url <远程名称> <新地址>
    
    1
    • 删除远程仓库
      git remote remove <远程名称>
    
    1

# 解决合并冲突

Accept Current Change    # 接受当前更改
Accept Incoming Change   # 接受传入更改
Accept Both Changes      # 接受两个更改
Compare Changes          # 比较更改
1
2
3
4

# 单独文件不执行合并

# 1.根目录新建.gitattributes文件
# 2.设置合并的文件地址
pages/common/config.js merge=ours
# 3.设置git使该配置生效
git config --global merge.ours.driver true
1
2
3
4
5

# hooks 钩子

  • 作用于一个特定版本库的钩子集合都能在.git/hooks目录下面找到
chmod u+x post-merge  ## 为post-merge设置权限
ls -lah post-merge    ## 查看权限
-rwxr--r-- 1 git git 88 Mar 19 00:00 post-receive
cat post-merge        ## 查看post-merge内容
#!/bin/bash
echo -e "Powered by \033[1;33mGITEE.COM\033[0m [\033[1;35mGNK-6.3\033[0m]"
#
1
2
3
4
5
6
7
上次更新: 2025/05/28, 22:27:40
Vscode插件
Mac时代

← Vscode插件 Mac时代→

最近更新
01
TypeScript是什么
06-15
02
项目搭建
05-21
03
Prettier
02-27
更多文章>
Theme by Vdoing | Copyright © 2022-2025 京ICP备2020044002号-4 京公网安备11010502056618号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式