Git
# git 是什么
Git 是一个版本控制系统,用于跟踪计算机文件的变化并协作开发代码。它可以记录每个文件的修改历史,帮助多人协作开发并处理代码冲突,以及管理不同版本的代码库。Git 是一个自由开源软件,由 Linus Torvalds 在 2005 年创建。
官网 (opens new window) 文档 (opens new window)
git 优势
- 适合分布式开发,强调个体。
- 速度快、灵活。
- 任意两个开发者之间可以很容易的解决冲突。
- 采用分布式存储方式,不需要服务器就可以运行。
版本控制工具
- 集中式版本控制工具: SVN
- 分布式版本控制工具: 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
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
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
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
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
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
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
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
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
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
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
2
3
4
5
6
7
8
9
10
# 重命名远程仓库
# origin → upstream
git remote rename origin upstream
1
2
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
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
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
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
2
3
4
5
6
7
上次更新: 2025/05/28, 22:27:40