Git 简介

版本控制工具,分布式版本控制系统

git commit 注释标记

参考文章

  • feat: 添加新功能
  • fix: 修复bug
  • refactor: 代码重构,没有加新功能(即不是新增功能,也不是修改 bug 的代码变动)
  • merge: 分支合并,解决冲突
  • docs: 仅仅修改了文档
  • style: 仅仅修改了空格、格式缩进等等,不改变代码逻辑
  • test: 增加测试用例
  • debug: 增加调试日志
  • chore: 构建过程、辅助工具的变动
  • perf: 提高性能

建立分支名规范

模板:开发者姓名拼音首字母_feat/fix_功能名

  • zs_feat_功能: 建立新功能分支
  • zs_fix_修复内容:建立 bug 修复分支

git remote

1
2
3
4
5
git init # 要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录
git remote # 查看远程库信息
git remote -v   # 查看远程库详细信息
git remote add origin git@github.com:<username>/weibo.git  # 本地 git 项目添加远程仓库地址,如github
git remote set-url origin git@url.here  # 修改远程仓库地址

git stash

当开发一个功能未完成突然要修复bug时,Git提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作。

1
2
3
git stash  # 隔离当前工作现场
git stash list  # 查看储藏的工作现场
git stash pop  # 恢复工作现场并删除stash内容

代码回滚命令

  1. git reset

    1
    2
    3
    4
    5
    6
    
    git reset --hard <old-commit-id> # 回滚
    git reset --hard HEAD^  #回退到上一个版本,HEAD^可以更改为commit版本号
    git reset . # 取消已贮存文件
    git reset HEAD <file>  #git暂存区add的file文件回退工作区
    git reset --soft HEAD^  # 撤回commit操作,提交的代码仍然保留『代码保留在暂存区』
    git reset --mixed HEAD^ # 撤回commit操作,提交的代码仍然保留『代码保留在工作区』(常用点)
    
  2. git checkout # 丢弃该file文件在工作区的修改

  3. git clean -f -d # 清理新建的新增且未提交项目,-f 是强制清理文件的设置,-d 选项命令连文件夹一并清除

  4. 版本回退:先本地版本回退,再强制 push 到 GitLab

    1
    2
    
    git reset --hard <old-commit-id>
    git push -f <remote-name> <branch-name>  #git push -f origin uat,主要是加个-f参数『Settings->Repository->Protected branches: gilab:master默认分支是保护状态取消分支保护即可提交』
    

忽略跟踪

1
2
3
4
5
6
7
# 忽略已经被提交或跟踪的具体文件,不能是文件夹

$ git update-index --assume-unchanged /path/to/file # 忽略跟踪某个文件

$ git update-index --no-assume-unchanged /path/to/file # 恢复跟踪某个文件

git ls-files -v | grep '^h'  # 查看所有被 update-index 忽略跟踪的文件

tag

1
2
3
4
5
git tag -a 'v0.0.1' -m '第一个版本的注释' # 打 tag
git push --tags # 推送 tag
git tag -d 标签名 # 删除本地标签
git reset --hard v0.02(版本的tag值) # 按tag 回滚
git push origin :refs/tags/标签名 # 删除远程标签

其他常用命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
git config --global --edit # 编辑全局变量文件

git log  # 回顾下提交历史
git reflog  # 用来记录你的每一次的提交版本命令

git commit --amend # 重新编辑提交说明 或 在上一个commit中添加新更改的文件
git commit --amend --author="mn <mn@qq.com>" # 修改已提交的author信息


git pull  # 拉取所有分支代码
git pull origin develop # 拉取远程分支代码到当前分支
git checkout -b test_branch develop # 在develop分支下创建新分支并切换分支

git branch -d test_branch # 删除已合并的分支
git branch -D test_branch # 删除任意分支
git branch | grep 'zsm_' | xargs git branch -d # 批量删除已合并分支 『xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。』

# 拉取远程分支的 2 种方式
git fetch origin develop && git checkout develop # 拉取develop远程分支到本地
git checkout -b develop origin/develop # 本地创建并切换到 develop 分支

# 将一个分支上的所有commit(修改)合并为同一个commit,然后合并到当前分支【注意gitlab的mr会自动勾选上squash选项,多个提交者信息会统一变为分支创建者】
git merge --squash feature_name

# 删除本地develop分支
git checkout uat && git branch -D develop && git checkout -b develop

Git 文件的三种状态

在Git中,文件只有三种状态,已修改,已暂存和已提交。

这三个文件分别放在工作目录,暂存区域和git目录。当一个文件修改完毕之后,它仍然在工作目录;只有当它被add之后,才会进入暂存区域,文件状态变为已暂存;最后,当文件被 commit之后,它就会进去git目录区域。

Git 常用分支

  • master:生产环境分支,不允许直接提交代码,只能从uat和hotfix分支合并
  • uat:预生产环境分支,不允许直接提交代码,只能从feature和hotfix分支合并,提交到这个分支意味着随时能合并到master并发布
  • develop:开发测试环境分支,不允许直接提交代码,从uat和master分支fork代码 只能从feature和hotfix分支合并
  • feature:新功能开发分支,从uat分支fork代码,开发完成后合并到develop测试,测试通过后合并到uat分支,然后删除重新fork
  • hotfix:生产环境修复分支,从master分支fork代码,开发完成后合并到master,酌情合并到其它分支,然后删除重新fork

Git 多帐号配置

  1. 生成两个ssh秘钥,关联不同的git账号,一个用于github,一个用于公司

  2. 秘钥校验配置:vi ~/.ssh/config

    1
    2
    3
    4
    5
    6
    
    # github
    Host github.com
    HostName github.com
    User xxx@.com
    PreferredAuthentications publickey
    IdentityFile /Users/xxx/.ssh/id_rsa_github
    
  3. 然后进入项目文件夹下,执行命令

    1
    2
    
    git config user.name "your_name"
    git config user.email "your_email"
    

    ~/.ssh

配置信息

  1. 用户名设置

    • git config –system user.name “hic”
    • git config –global user.name “hic”
  2. 电子邮件

    git config –global user.email “hic@gmail.com

  3. 查看配置信息

    git config -l

  4. 如果要查看某个特定的环境变量,只要把它的名字放到最后即可

    git config user.name

  5. 配置git 使其对文件名大小写敏感

    git config core.ignorecase false

  6. 编辑/删除全局变量

    git config –global –edit

  7. 添加全局变量,将 http 拉取代码的方式替换为 ssh 方式

    git config –global url.“git@gitlab.xxx.cn:".insteadOf “http://gitlab.xxx.cn/"

公司变更 gitlab 地址后需执行的操作

  1. 在新 gitlab 上 add ssh key「在本机执行命令:cat ~/.ssh/id_rsa.pub 即可获取ssh key」
  2. 在本地代码库执行更换源命令:git remote set-url origin git@gitlab.xxx.com:xxx/对应项目名称.git

分支开发流程图

分支开发流程图

GitHub

fork项目后,如何同步更新原先项目的提交

1
2
3
4
5
git remote -v
git remote add upstream git@github.com:xxx/xxx.git
git fetch upstream
git merge upstream/master
git push

批量删除 Github 仓库

批量删除 Github 仓库