• Git总结


    Git介绍

    一、Git常用命令

    在这里插入图片描述

    添加、提交

    git add  
    将文件从工作区添加到暂存区,表示git开始追踪文件,如果不想让git追踪了,可以使用
    git rm --cached <file>  取消文件追踪,仅仅只代表追踪取消,工作区文件还是照样存在
    git mv
    重命名文件,相当于mv +git rm + git add
    
    
    如果add以后,我再改动了文件,想要撤销这次修改?就可以使用
    git restore file
    或者使用
    git checkout -- file
    回到上一次add以后的状态。注意这里不能直接删除文件
    
    注意上述命名和git rm --cached file 的区别,前者是取消修改,后者是取消追踪!
    
    如果我想取消add呢?就使用git提示的命令
    git restore --staged <file>  注意与上述命令的区别
    
    
    git commit -m "message"
    将暂存区的文件提交到本地库,并添加注释,加-a可以自动添加到暂存区
    
    git commit --amend
    修改上一次提交的message
    
    
    git commit --amend --no-edit  不想有新的commit
    
    git reset --soft HEAD^  
    这样可以撤销commit,如果想要连着add也撤销的话,–soft改为–hard(删除工作空间的改动代码)
    
    值得注意的是,如果你总共只有一个commit,上面的命令是不生效的,至少得有2个commit
    
    • 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
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    删除

    删除仓库中所有没有跟踪的文件,清除编译生成的临时文件
    git clean -i 表示以交互的形式删除文件
    git clean -n 查看所有即将被删除的文件
    git clean -f 表示强制删除
    git clean -d 递归删除目录
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    历史记录、分支

    git log
    查看提交历史
    --oneline:每个提交一行
    --graph:显示分支结构
    --stat:显示文件删改信息
    -p:显示详细的修改内容
    
    git reset --hard  <版本号>
    可以将HEAD指针回退到之前的版本号
    
    git checkout  git switch 
    切换分支
    
    git checkout -b <本地分支> <origin/远程分支>
    将远程仓库里指定的分支拉取到本地,并在本地创建一个分支与指定远程仓库分支关联起来。并切换到新建的本地分支中
    
    git branch -a -r -v 所有分支,远程分支,每个分支的最后一次提交
    
    git branch --merged 查看哪些分支已经合并到当前分支,意味着可以-d删除
    
    git branch --no-merged 查看哪些分支没有合并到当前分支,此时-d删除会出错,除非-D强制删除
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    git branch -vv
    可以查看分支跟踪信息,以及是否领先、落后
    
    • 1
    • 2

    在这里插入图片描述

    git merge <分支test>
    将test分支合并到当前分支,注意这里只会修改当前分支的内容。
    比如有test和master两个分支,同时修改了txt文件,test修改一行,master修改第二行,虽然人看起来合并结果没有冲突,但是git确定不了,因此会提示冲突,此时人为解决冲突再合并即可。合并完成以后master分支就是同时修改了第一行和第二行的结果,而test分支不变。
    
    git merge    git merge --squash的区别
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    暂存修改

    使用场景:在dev分支开发的时候,需要去hotfix分支解决bug,但是不想放弃当前的修改,就可以使用git stash保存起来
    值得注意的是,只有git add进去的文件,才能被stash追踪。
    git stash == git stash save
    
    查看堆栈里的修改
    git stash show||list
    
    应用堆栈中最新的修改,且不丢弃
    git stash apply
    
    应用堆栈中最新的修改,且丢弃
    git stash pop
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    远程

    git remote -v
    查看当前所有远程库地址的别名
    
    git remote add <别名> <远程地址>
    给远程库地址添加别名
    
    一般是默认为origin,执行完这一步,就可以push了
    git remote add origin git@github.com:name/repo.git 添加远程索引;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    git push <别名> <分支名>
    将分支推送到远程地址,没有别名也可以填地址,但是比较麻烦
    
    实际上这个命令的完整命令是 
    git push <远程主机名> <本地分支名>:<远程分支名>如果本地分支名与远程分支名相同,则可以省略冒号:
    git push <远程主机名> <本地分支名>
    比较常见的是
    git push origin master
    因为一般是git clone下来的,然后git默认把远端地址别名取为origin
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    git pull <远程主机名> <远程分支名>:<本地分支名>
    git pull 和 git push 命令类似,当远程仓库存在改动时,为了保证本地和远程同步,就要使用git pull
    事实上git pull相当于git fetch + git merge
    
    git fetch命令格式与git push也类似。
    eg: git fetch master:new_feature_branch表示从远程的master分支拉取更新到本地的new_feature_branch分支
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    变基

    git rebase -i HEAD~2
    背景是当前我有两个commit,时间上是a,b。然后可以使用该命令将b压缩到a上面。
    fixup参数代表squash压缩。如果顺序反了会有错误提示,--abort这次rebase即可。
    
    git checkout feature
    git rebase master
    将当前分支feature变基到master分支
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    origin的一些解释
    git变基以及更多例子
    git fetch的一些解释

    二、Git内部原理

    git核心组成部分HEAD文件、index文件、objecs目录、refs目录。

    HEAD文件指向目前被检出的分支
    index文件保存暂存区信息
    objects目录存储所有数据内容
    refs目录存储指向数据(分支、远程仓库和标签等)的提交对象的指针
    在这里插入图片描述

    参考知乎动图

  • 相关阅读:
    从零开始构建一个电影知识图谱,实现KBQA智能问答[上篇]:本体建模、RDF、D2RQ、SPARQL endpoint与两种交互方式详细教学
    SQL之开窗函数
    手把手教学:二阶魔方还原
    Apache Hive 数据掩码函数教程
    线程常见面试题回答
    6种自媒体赚钱方法!
    《蓝海战略》让你竞争中获得优势
    Springcloud中间件-----分布式搜索引擎 Elasticsearch
    【数据结构】详解二叉树之堆
    springboot多环境配置
  • 原文地址:https://blog.csdn.net/qq_40896190/article/details/134081668