Skip to content

Git

TODO

1. 使用版本控制,而不是删除项目再重新拉取

  1. 如果在某个commit中提交了隐私信息, 比如明文的密码, 该怎么办? 答: 使用 git rebase. 那git revert是干嘛用的

  2. 冲突合并(修改了同个文件中的同一个内容)

config

sh
# 全局配置文件 ~/.gitconfig 这个邮箱需要使用到github上你绑定的邮箱
git config --global user.name "[name]"
git config --global user.email "[email address]"

# project级别的配置文件 .git/config
git config user.name "[name]"
git config user.email "[email address]"

# 启用有帮助的彩色命令行输出
git config --global color.ui auto
# 设置commit时使用的编辑器为vim
git config --global core.editor vim
sh
# 测试与github通信否成功
ssh -T git@github.com
# 测试别名
ssh -T vps_ifourx

branch

sh
# 查看本地分支 -r远程 -a所有 -vv当前分支的关联关系
git branch

# 切换分支
git switch "<branch-name>"

# 创建本地分支并切换
# 等价于 git branch <branch-name> && git switch <branch-name>
git switch -c "<branch-name>" [<origin>/<dev>]

# 重命名分支
git branch -m <old-name> <new-name>

# 删除本地分支(未合并会报错), -D强制删除
git branch -d "<branch-name>"

# 删除远程分支dev
git push origin --delete dev

# 将<branch-name>分支下的<dir>目录复制到当前分支
git checkout <branch-name>  -- <dir>

fetch & merge | pull

sh
# git fetch --all # 下载所有远程主机远端跟踪分支的所有历史(并不会修改工作目录中的内容,从远程更新数据,只会获取数据然后需要自己手动合并)
# 不常用: git fetch origin main:temp 从指定远程(origin)的main分支映射到本地的temp分支(会覆盖)
git fetch origin     # 从远程(origin)更新所有分支信息; 或者使用 git fetch origin main 只更新main分支
git merge origin/main   # 将刚刚fetch的远程main分支merge到当前所在分支,区别于 git merge main

# --no-ff
# 禁止快进模式,对main分支非常友好,建议合并时都加上这个参数
git switch main
git merge --no-ff -m "merge with no-ff" <hotfix>
git branch -d <hotfix>

# git pull 是 git fetch 和 git merge 的结合
# 将远程分支fetch并merge到本地分支
# 推荐使用fetch和merge代替pull
git pull <远程主机> <远程分支>:[本地分支名]
git pull origin main:main

tag

sh
# 列出已有标签
git tag

# 可以创建带有说明的标签,用-a指定标签名,-m指定说明文字
git tag -a v2.0.6 -m "version 2.0.6" <本地分支>

# 给某次commit打上标签 v1.2
git tag -a v1.2 f8603ca

# 查看打标信息
git show v1.2

# 将标签信息推送到服务器。 git push origin --tags 推送所有不在远程的标签
git push origin <tagname>

# 删除本地标签。
git tag -d <tagname>

# 删除远程仓库的标签
git push origin --delete <tagname>

Commit type

类型 (type)含义示例
feat✨ 新功能feat: 添加登录模块
fix🐛 修复 bugfix: 修复表单验证错误
docs📚 文档变更(仅文档,不是代码)docs: 补充 README 示例
style💅 格式更改(空格、缩进等)style: 调整代码缩进和空格
refactor♻️ 代码重构(无功能改动)refactor: 重构用户服务逻辑
test✅ 添加或更新测试代码test: 增加接口测试用例
chore🔧 构建流程、脚手架、依赖更新等chore: 升级 eslint 版本
perf🚀 性能优化perf: 优化分页查询性能
ci🛠️ CI/CD 流程相关变更ci: 修复 GitHub Actions 错误
build📦 构建相关(如 webpack、npm)build: 修改打包配置
revert⏪ 回滚之前的提交revert: 回滚 user 模块修改

see more: Conventional Commits

remote

关联本地仓库与github远程仓库

TIP

可以修改 <git@github.com> 为你本地的 ~/.ssh/config 中的别名配置, 如: <githubifourx>

sh
# git remote add <name> <url>: add a remote
git remote add origin <git@github.com>:你的用户名/仓库名.git

# 查看remote的地址
git remote -v

查看更新后的配置 cat .git/config

push

将本地分支提交上传到 GitHub, 远程分支不存在时会自动创建

sh
# 将本地分支推送到远程分支
# -u : --set-upstream 设置上游分支, 将当前本地分支和远程分支建立绑定关系(跟踪)
# (本地分支名与远程分支名相同,可以省略 `:<远程分支名>`)
git push -u <远程主机> <本地分支>:[远程分支名]

# 执行过 -u 关联绑定后, 后续可以直接使用 git push 来提交
# git push <远程主机名> <本地分支名>:[远程分支名]
# git push origin dev:dev
git push

Tips

worktree

worktree用来在不同的文件夹里同时打开同一个项目的多个分支, 实时共享同一个底层仓库

worktree可以用来并行开发, 特别适合agent(比如在bugfix分支, main分支, feature分支并行执行3个agent任务)

sh
git worktree add <新文件夹路> <分支>

# 查看worktree
git worktree list

# 删除worktree目录
git worktree remove <新文件夹路>

# 如果使用 `rm -rf` 删除的worktree目录, 可能会留下无用的"僵尸记录", 使用prune清理
git worktree prune