NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • 分享 - Git笔记

    • 常用命令
      • 配置签名
      • 初始化本地库
      • 查看本地库状态
      • 添加暂存区
      • 删除暂存区
      • 提交本地库
      • 查看历史版本
      • 切换版本
      • 暂存文件(Stash)
      • 恢复误删文件(夹)
      • 搜索包含关键字的提交
      • 查找被删除的文件
    • 分支命令
      • 查看列表
      • 查看当前分支
      • 创建分支
      • 切换分支
      • checkout
      • switch
      • 合并分支
      • 正常合并
      • 冲突合并
      • 添加的暂存区
      • 提交到本地库
      • 修改分支名称
      • 修改上游分支
    • 远程库命令
      • 查看列表
      • 添加远程仓库
      • 修改仓库地址
      • 推送本地库到远程库
      • 拉取远程库到本地库
      • 克隆远程库到本地
    • 团队合作
      • 团队内协助
      • 跨团队协助
      • 外人-拉取项目
      • 外人-请求合并
      • 项目管理者-审核合并请求
    • 全局配置
      • 代理
      • 中文乱码
    • 忽略文件(.gitignore)
      • 提交消息编写规范
        • Header
        • type
        • scope
        • subject
        • Body
        • Footer
        • 不兼容变动
        • 关闭 Issue
        • Revert
    • 笔记
    NipGeihou
    2022-01-11
    目录

    分享 - Git笔记

    # 常用命令

    # 配置签名

    与账号无关

    git config --global user.name 用户名
    git config --global user.email 邮箱
    

    # 初始化本地库

    在项目根目录,会生成 .git 目录

    git init 
    

    # 查看本地库状态

    在什么分支,查看提交记录,有没有没 add 的文件

    git status
    

    # 添加暂存区

    只要文件被修改,就要 add

    git add 文件名
    
    git add . #所有文件
    
    git add doc/*  #doc目录下的所有
    

    # 删除暂存区

    常用于误把 .idea 等文件夹添加到了版本控制后删除操作

    git rm --cached 文件名 #从暂存区删除文件(不再追踪)
    
    # git rm --cached -r .idea
    
    • -r :递归删除(删除文件夹时携带)
    • --cached :仅在版本控制中删除,与之对应有个 -f 参数删除实际文件

    # 提交本地库

    git commit -m "日志信息" 文件名
    
    git commit -am "日志信息" # add和commit简化操作
    

    # 查看历史版本

    git reflog # 精简
    git log # 完整 
    git log --graph # 带合并分支图
    

    提示

    按 q 退出历史版本列表

    # 切换版本

    git reflog # 查看历史版本,找到要切换的版本标识
    git reset --hard 版本标识(精简) # 切换版本
    

    # 暂存文件(Stash)

    https://git-scm.com/docs/git-stash

    场景

    正在开发代码时,突然要求修一个 bug,这时就可以使用此命令将开发中的代码暂存起来,回到当前版本无任何修改的状态,把 bug 修复后,再恢复开发中的代码。

    # 暂存
    git stash
    
    # 修bug..... commit ....
    
    # 恢复
    git stash pop
    

    # 恢复误删文件 (夹)

    也可用部分文件版本回滚

    # 找到文件删除前一个的commit版本hash
    git reflog  # 推荐在可视化工具找
    
    # 检出指定版本的文件(夹)
    git checkout <commit版本> <文件(夹)路径>
    #git chekout 8933439 ./ # 已cd到文件目录
    

    # 搜索包含关键字的提交

    git log -S <keyword>
    # git log -S password
    

    Search all of Git history for a string - Stack Overflow (opens new window)

    # 查找被删除的文件

    # 显示所有被删除文件的提交记录
    git log --diff-filter=D --summary
    
    # 查看特定文件的历史记录
    git log -- [file_path]
    
    # 恢复被删除的文件
    git checkout [commit_id]^ -- [file_path]
    #git checkout abc123^ -- path/to/your/file.txt
    

    # 分支命令

    # 查看列表

    # 查看本地分支列表
    git branch
    
    # 查看远程分支列表
    git branch -r
    
    # 查看所有分支列表
    git branch -a
    

    # 查看当前分支

    可查看当前分支

    git branch -v
    

    # 创建分支

    git branch 分支名
    

    # 切换分支

    # checkout

    # 切换到 <分支名> 分支
    git checkout <分支名>
    
    # 创建并切换到 <分支名> 分支
    git checkout -b <分支名>
    
    # 拉去远程分支并切换
    git checkout -t origin/remote-branch-name
    

    # switch

    git 2.23 版本新特性

    # 切换到 <分支名> 分支
    git switch <分支名>
    
    # 创建并切换到 <分支名> 分支
    git switch -c my-branch
    

    # 合并分支

    # 正常合并

    在 master (A) 主分支下执行,即将 B 合并到 A 分支上

    git merge 分支名(B)
    

    # 冲突合并

    HEAD 当前分支 到冲突的文件,将冲突的代码自行合并,并删除 Git 生成的标识。

    # 添加的暂存区
    git add 冲突的文件名
    
    # 提交到本地库
    git commit -m "提交信息" # 不要添加冲突文件名
    

    # 修改分支名称

    git branch -m 旧名称 新名称
    # git branch -m main master
    

    # 修改上游分支

    如果未指定,则默认为当前分支。

    场景:常用于原远程分支为 dev1 ,拉去到本地后,变更为 dev 分支,但 push 时还是默认 push 到 origin/dev1 。

    git branch -u <upstream>
    # 或
    git branch --set-upstream-to=<upstream>
    
    # git branch -u origin/main
    # git branch --set-upstream-to=origin/main
    

    # 远程库命令

    # 查看列表

    git remote -v
    

    # 添加远程仓库

    git remote add origin(别名) 远程库https地址 # ssh地址需上传公钥
    

    常用 origin 作为别名

    # 修改仓库地址

    git remote set-url 别名 新地址
    # git remote set-url origin [email protected]:NipGeihou/xxxxx
    

    # 推送本地库到远程库

    首次推送需要登录 github 的账号

    git push 别名|地址 本地分支名
    
    # 强制推送(仅建议在初始化远程仓库时误点击初始化了文件导致的推送失败)
    git push -f <别名|地址> <本地分支名>
    # git push -f origin master
    

    # 拉取远程库到本地库

    随时保证本地库是最新的

    git pull 别名|地址 远程分支名
    

    # 克隆远程库到本地

    克隆不需要登录

    git clone 地址
    

    clone 做了三件事: 拉去代码 、 初始化本地库 、 创建别名

    更多命令帮助查看 gti --help

    # 团队合作

    # 团队内协助

    新人需要项目管理者邀请到项目,才可以 push 项目

    # 跨团队协助

    # 外人 - 拉取项目

    外人使用 fork 项目到自己仓库,之后跟自己的项目一样,修改、提交。

    # 外人 - 请求合并

    在 GitHub fork 到自己仓库的项目,点击 pull request -> New Pull Request -> create pull request

    # 项目管理者 - 审核合并请求

    在项目管理者账号的项目下的 pull request 可看到合并请求

    # 全局配置

    # 代理

    常用于推送到 GitHub 远程库超时等网络问题时

    git config --global http.proxy 'socks5://127.0.0.1:1080'
    git config --global https.proxy 'socks5://127.0.0.1:1080'
    

    # 中文乱码

    # 解决git status中文乱码问题
    git config --global core.quotepath false
    

    # 忽略文件(.gitignore)

    # dir 不需要提交的目录
    /node_modules
    
    # file 不需要提交的文件
    config.ini
    
    # log 不需要提交的任意包含后缀名为log的文件
    *.log
    
    # Package Files 不需要提交的任意包含后缀名为jar的文件
    *.jar
    

    参考资料

    • github/gitignore: A collection of useful .gitignore templates (opens new window)
    • [Git].gitignore 文件的配置使用 - 知乎 (opens new window)

    # 提交消息编写规范

    <type>(<scope>): <subject>
    // 空一行
    <body>
    // 空一行
    <footer>
    
    • 最大以一种 type 为维度提交一次 commit,不应在一次 commit 中包含多种 type
    • Commit message 包括三个部分:Header (必须)、Body、Footer。
    • 任何一行都不得超过 72 个字符(或 100 个字符),避免自动换行影响美观。

    # Header

    Header 部分只有一行,包括三个字段: type (必需)、 scope (可选)和 subject (必需)。

    # type

    type 用于说明 commit 的类别,只允许使用下面 7 个标识。

    feat: 新功能(feature)
    fix: 修补bug
    docs: 文档(documentation)
    style: 格式(不影响代码运行的变动)
    refactor: 重构(即不是新增功能,也不是修改bug的代码变动)
    test: 增加测试
    chore: 构建过程或辅助工具的变动
    
    • 如果 type 为 feat 和 fix ,则该 commit 将肯定出现在 Change log 之中。
    • 其他情况( docs 、 chore 、 style 、 refactor 、 test )由你决定,要不要放入 Change log,建议是不要。

    # scope

    scope 用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。

    # subject

    subject 是 commit 目的的简短描述,不超过 50 个字符。

    • 以动词开头,使用第一人称现在时,比如 change ,而不是 changed 或 changes
    • 第一个字母小写
    • 结尾不加句号( . )

    # Body

    Body 部分是对本次 commit 的详细描述,可以分成多行。下面是一个范例。

    More detailed explanatory text, if necessary.  Wrap it to 
    about 72 characters or so. 
    
    Further paragraphs come after blank lines.
    
    - Bullet points are okay, too
    - Use a hanging indent
    

    有两个注意点。

    (1)使用第一人称现在时,比如使用 change 而不是 changed 或 changes 。

    (2)应该说明代码变动的动机,以及与以前行为的对比。

    # Footer

    Footer 部分只用于两种情况。

    # 不兼容变动

    如果当前代码与上一个版本不兼容,则 Footer 部分以 BREAKING CHANGE 开头,后面是对变动的描述、以及变动理由和迁移方法。

    BREAKING CHANGE: isolate scope bindings definition has changed.
    
        To migrate the code follow the example below:
    
        Before:
    
        scope: {
          myAttr: 'attribute',
        }
    
        After:
    
        scope: {
          myAttr: '@',
        }
    
        The removed `inject` wasn't generaly useful for directives so there should be no code using it.
    

    # 关闭 Issue

    如果当前 commit 针对某个 issue,那么可以在 Footer 部分关闭这个 issue 。

    Closes #234
    
    # or
    
    Closes #123, #245, #992
    

    # Revert

    还有一种特殊情况,如果当前 commit 用于撤销以前的 commit,则必须以 revert: 开头,后面跟着被撤销 Commit 的 Header。

    revert: feat(pencil): add 'graphiteWidth' option
    
    This reverts commit 667ecc1654a317a13331b17617d973392f415f02.
    

    Body 部分的格式是固定的,必须写成 This reverts commit <hash>. ,其中的 hash 是被撤销 commit 的 SHA 标识符。

    如果当前 commit 与被撤销的 commit,在同一个发布(release)里面,那么它们都不会出现在 Change log 里面。如果两者在不同的发布,那么当前 commit,会出现在 Change log 的 Reverts 小标题下面。

    参考资料

    • Commit message 和 Change log 编写指南 - 阮一峰的网络日志 (opens new window)
    #Git
    上次更新: 2024/10/15, 15:44:03
    最近更新
    01
    Docker Swarm
    04-18
    02
    安全隧道 - gost
    04-17
    03
    Solana最佳实践
    04-16
    更多文章>
    Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式