git从大师到黄金

24 阅读4分钟

代码提交注释规范

  • feat: 新功能
  • fix: 修复问题/BUG
  • docs: 文档变更
  • style: 代码格式(不影响代码运行的变动)
  • refactor: 重构(即不是新增功能,也不是修改 bug 的代码变动)
  • test: 增加测试
  • chore: 构建过程或辅助工具的变动
  • perf: 优化相关,比如提升性能、体验
  • build: 构建项目或外部依赖的变动
  • ci: 持续集成相关文件变动
  • revert: 恢复上一次提交
  • merge: 代码合并
  • deps: 依赖的变动

git 指令

  • 添加文件到本地 git 中: git add . || git add test.txt
  • 设置提交记录: git commit -m "记录信息"
  • 拉取远程分支内容: git pull(默认会拉取跟踪的远程分支内容) || git pull origin main
  • 提交 commit 至远程分支: git push origin main
  • 本地分支关联远程分支: git branch --set-upstream-to=origin/main main
  • 签出指定分支指定文件: git checkout main -- common.js
  • 获取所有分支最新信息(不会自动合并本地内容): git fetch
  • 查看所有分支情况: git branch -a
  • 查看本地分支与远程分支的跟踪情况: git branch -vv
  • 缓存当前本地的内容: git stash save "缓存提示信息" (缓存的是当前 git add 的内容)
  • 查看缓存列表: git stash list
  • 拉取并自动合并首条缓存(会删除缓存记录): git stash pop
  • 拉取并自动合并指定缓存(不删除缓存记录)(默认第一条): git stash apply (默认第一条) || git stash apply stash@{2} (提取第三条缓存)
  • 删除缓存: git stash drop stash@{2} (删除缓存列表中第三条缓存)
  • 清除所有缓存: git stash clear
  • 查看当前分支 commit 记录列表: git log
  • 撤销本地此次的 commit 操作(未推送远程仓库): git reset --soft HEAD1 (撤销 commit 但保留文件的修改) || git reset --hard HEAD1 (撤销 commit 并不保留工作区修改)
  • 回滚提交: git revert hashcode || git reset --hard hashcode
  • 合并指定提交: git cherry-pick hashcode

init 初始仓库

全局设置账户(git 账户)

git config --global user.name "username"
git config --global user.email "email"

创建 git 仓库:

mkdir git-branch
cd git-branch
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/Yinsls/git-branch.git
git push -u origin "master"

已有仓库?

cd existing_git_repo
git remote add origin https://gitee.com/Yinsls/git-branch.git
git push -u origin "master"

常规提交代码到仓库

  • git add . || git add xxx.txt(或者单独添加某文件)
  • git status
  • git commit -m "提交的记录信息"
  • git pull
  • git push

创建新分支

创建全新分支

# 创建空分支new-empty-branch
git checkout --orphan new-empty-branch

# 删除原有所有内容(只会影响你当前所在的分支,不过需注意此操作前已经保存并提交了所有修改的内容)
git rm -rf .

# 提交新分支至远程仓库
git commit --allow-empty -m "Initial empty commit"
git push origin new-empty-branch

# 查看仓库所有分支情况
git branch -a

基于 main 分支创建 dev 分支

# 拉取所有分支最新信息(注意: 不会自动合并你当前的分支与远程分支的内容,只是更新了远程跟踪分支的信息)
git fetch || (git checkout main && git pull)

# 基于远程main分支创建并切换到本地dev分支
git checkout -b dev origin/main

# 将本地dev分支推送到远程仓库
git push origin dev

# 设置本地分支与远程分支关联(确保本地的 dev 分支跟踪远程的 dev 分支,否则可能会出现拉取到main分支的代码)
git branch --set-upstream-to=origin/dev dev

# 查看所有分支情况
git branch -a

分支回滚

    # 前提: 已存在提交记录001、002、003

    # 存在记录的回滚,操作后记录: 001、002、003、004(revert回滚信息)
    git revert 002 (回滚至002记录,但此时commit列表会多一条revert的记录,以及之前的003记录也存在,相当于以002的提交重新commit覆盖当前)

    # 直接回档的回滚,操作后记录: 001、002
    git reset --hard 002 (回滚至002记录,且会完全清除002至当前的所有commit记录)

    # 将修改同步至远程仓库
    git push --force origin main

分支合并

完整分支合并(将 main 合并到 dev)

$main: git pull
$main: git checkout dev
$dev: git pull
$dev: git merge main
# 解决冲突
$dev: git add 冲突的文件
$dev: git commit (会自动生成合并信息)
$dev: git add .
$dev: git commit --no-edit  (会提交没有冲突的文件,并保留前一步的提交消息)
$dev: git push

合并指定记录

# 前提: main中存在提交p001、p002、p003、p004
# 将main中的p002、p003提交合并到dev分支中(实际开发中常用于解决bug或中途修改内容等)
# cherry-pick成功后会完整复制目标提交信息(p002、p003),并不会出现类似merge消息的cherry-pick,而是与原提交一致,除了hash值不同

$dev: git cherry-pick p002

# 解决冲突后需要执行,否则不可继续合并其他提交
$dev: git add xxx (冲突的文件)
$dev: git cherry-pick --continue

$dev: git cherry-pick p003

# 解决冲突后需要执行,否则不可继续合并其他提交
$dev: git add xxx (冲突的文件)
$dev: git cherry-pick --continue

$dev: git add .
$dev: git push origin dev

编程的世界总是充满未知,期待与你在技术的海洋中再相遇
I just hope my code makes more sense than my life.