欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Git 思维导图

程序员文章站 2024-03-23 20:49:52
...

Git 思维导图

Git思维导图

Git 帮助

Git 命令手册

  • git help

Git 官方文档

  • https://git-scm.com/book/zh/v2

Git 配置

查看配置变量

  • git config
  • git config --list 列出所有配置
  • –show-origin 列出配置所在文件

设置配置变量

  • git config

配置文件位置

    1. /etc/gitconfig
    • 包含系统上每一个用户及他们仓库的通用配置。 在执行 git config 时带上 --system 选项。
    1. ~/.gitconfig
    • 只针对当前用户,这会对你系统上所有的仓库生效。在执行 git config 时带上 --global 选项。
    1. .git/config
    • 针对该仓库,默认情况下用的就是它。在执行 git config 时带上 --local 选项。
  • 每一个级别会覆盖上一级别的配置。

配置用户信息

  • git config --global user.name
    git config --global user.email

Git 仓库

获取仓库

    1. 将尚未进行版本控制的本地目录转换为 Git 仓库
    • git init
    1. 从其它服务器克隆一个已存在的 Git 仓库。
    • git clone

把文件更新到仓库

  • 检查当前文件状态

    • git status
  • 跟踪新文件

    • git add
  • 提交更新

    • git commit
    • 不建议使用git commit -m,遵循 commit message 规范
  • 忽略文件

    • .gitignore文件
  • 查看已暂存和未暂存的修改

    • git diff
    • 建议使用 diff 工具,git difftool

文件状态

    1. 已修改(modified)
    • 表示修改了文件,但还没保存到本地仓库中。
    1. 已暂存(staged)
    • 表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
    1. 已提交(committed)
    • 表示数据已经安全地保存在本地仓库中。

commit message 规范

  • 格式

    • ():

                           <body>
      
                           <footer>
      
  • type:提交类别

    • feat:新功能
    • fix:修复bug
    • docs:文档
    • style:格式(不影响代码运行的变动)
    • refactor:重构(即不是新增功能,也不是修改bug的代码变动)
    • test:测试
    • chore:构建过程或辅助工具的变动
  • scope:影响范围(可以不写)

  • subject:对改变的正常描述,最好以动词开头语(尽量详细)

  • body:详细描述(可以不写)

  • footer:修改不兼容变动以及关闭 Issue时(可以不写)

.gitignore

    1. 所有空行或者以 # 开头的行都会被 Git 忽略。
    1. 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
    1. 匹配模式可以以(/)开头防止递归。
    1. 匹配模式可以以(/)结尾指定目录。
    1. 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。
  • glob 模式

    • glob 模式是指 shell 所使用的简化了的正则表达式。 星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c); 问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号()表示匹配任意中间目录,比如 a//z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等。

把 vimdiff 设置为 diff 工具

  • git config --global diff.tool vimdiff
    git config --global difftool.prompt false

代码版本/提交切换

查看过去版本/提交

  • 1、提交详情

    • git log
  • 2、提交简介

    • git log --pretty=oneline
  • 3、 分支图形化

    • git log --graph

回退版本/提交

  • 1、回退到当前最新提交

    • git reset --hard HEAD
  • 2、回退到上次提交

    • git reset --hard HEAD^
  • 3、回退到上n次提交

    • git reset --hard HEAD~n
  • 4、回退到某次提交

    • git reset --hard commitid

重返未来版本

  • 1、查看历史提交以及被回退的提交

    • git reflog
    • 注意:该记录有时限,且只在本地
  • 2、回到未来版本

    • git reset --hard

撤销修改

  • 1、工作区文件撤销
    没有提交到暂存区/没有git add

    • 撤销修改

      • git checkout
  • 2、暂存区文件撤销

    • 将暂存区文件撤销到工作区

      • git reset HEAD
    • 撤销修改

      • git checkout
  • 3、提交到了版本库

    • 参见回退版本/提交

删除文件

  • 1、删除文件
    从版本库中删除文件

    • git rm
    • 修改后需要提交
  • 2、恢复删除

    • 参考撤销修改
  • 3、从版本库中删除文件,但是本地不删除该文件

    • git rm --cached

移动文件

  • 将文件/文件夹移动

    • git mv

暂存修改

  • 参照分支-暂存修改

分支

创建与合并分支

  • 1、创建分支

    • 仅创建

      • git branch 分支名
    • 创建并切换

      • git checkout -b 分支名
    • 注意:在本地仓库操作,创建的都是本地分支

  • 2、切换分支

    • git checkout 分支名
  • 3、合并分支

    • git merge
      合并某分支到当前分支

    • 注意:合并分支时禁用fast forward

      • git merge --no-ff 分支名
    • git rebase
      若无特殊需要不建议使用

  • 4、删除分支

    • 删除本地分支

      • 删除未合并分支

        • git branch -D 分支名
      • 删除已合并分支

        • git branch -d 分支名
    • 删除远程分支

      • 删除远程分支

        • git push origin -d 分支名
        • git push <远程仓库名> -d 分支名
      • 建议界面操作

  • 5、查看分支

    • 查看当前分支

      • git branch
    • 查看所有分支信息

      • git branch -a

        • 本地分支为本地分支名
        • 远程分支为<远程仓库名>/分支名
  • 6、合并分支,解决分支冲突

    • 将要合并的分支更新到最新

    • 切换到主分支

    • 合并分支

    • 解决合并时的conflict

    • 提交到版本库

    • 合并成功

    • 查看分支状态

      • git log --graph
      • git log --graph --pretty=oneline --abbrey-commit
  • 7、开发完需要提交PR/MR

    • 通过PR/MR来合并开发分支与主分支

暂存修改

  • 1、暂存工作现场

    • git stash
  • 2、恢复工作现场

    • 恢复

      • git stash apply
    • 删除

      • git stash drop
    • 恢复+删除

      • git stash pop

多人协作

  • 1、查看远程库信息

    • 详细

      • git remote -v
    • 不详细

      • git remote
  • 2、更新/推送远程库

    • 更新远程库信息

      • git fetch
    • 将远程库最新修改更新到本地

      • git pull
      • git pull可以认为是
        git fetch+git merge
    • 将本地修改推送到远程库

      • git push
      • git push origin 分支名
  • 3、本地分支与远程分支交互

    • 使用远程分支A创建本地分支

      • git checkout -b A origin/A
      • origin是远程仓库名,若名字一样origin/A可以省略
    • 将本地分支与远程分支作关联

      • git branch --set-upstream A origin/A
      • 提示no tracking information错误

建议开发遵循或者参照git标准工作流,比如git flow、github flow或者gitlab flow

代码版本tag

1、查看tag

  • 本地tag

    • git tag
  • 远程tag

    • git tag -r

2、操作tag

  • 添加tag

    • 给当前版本添加tag

      • git tag 标签名
    • 给历史版本添加tag

      • git tag 标签名 commitid
  • 删除tag

    • 删除本地标签

      • git tag -d 标签名
    • 删除远程标签

      • git push origin -d 标签名
  • 推送到远端仓库

    • git push origin 标签名

    • 推送所有未提交的tag

      • git push origin --tags
  • 更新到本地

    • git pull origin --tags

tag与branch的操作基本一致,因为tag就是一个仅可读的branch

其他生僻命令

git blame

git bisect

  • 过二分查找定位引入 bug 的变更

git relog

可以使用git help查看git常用的命令,使用git help -a查看git可用的所有命令

git flow

图示

常用分支

  • Master 分支

    • 这个分支最近发布到生产环境的代码,最近发布的Release, 这个分支只能从其他分支合并,不能在这个分支直接修改。
  • Develop 分支

    • 这个分支是我们是我们的主开发分支,包含所有要发布到下一个Release的代码,这个主要合并与其他分支,比如Feature分支
  • Feature 分支

    • 这个分支主要是用来开发一个新的功能,一旦开发完成,我们合并回Develop分支进入下一个Release
  • Release分支

    • 当你需要一个发布一个新Release的时候,我们基于Develop分支创建一个Release分支,完成Release后,我们合并到Master和Develop分支
  • Hotfix分支

    • 当我们在Master发现新的Bug时候,我们需要创建一个Hotfix, 完成Hotfix后,我们合并回Master和Develop分支,所以Hotfix的改动会进入下一个Release