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
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 版本标签管理
使用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 [分支名称] # 删除分支
1
o n g git branch -D [分支名称] # 强制删除分支 git push origin --delete [分支名称] # 删除远程仓库上的分支 ```
- 切换分支
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 push -u origin master
# 设置本地分支追踪远程分支 之后就可以直接使用`git push`提交代码
git push --set-upstream origin 分支名
git rm --cached [文件名] # 从暂存区移除文件
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
拉取远程仓库
# 克隆仓库到本地
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
# 解决合并冲突
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
上次更新: 2024/11/11, 18:51:09