Git的基本概念与操作

Git

  • 分布式的版本控制系统,SVN为集中式的版本控制系统
  • 下载地址https://git-scm.com/

Git 基础

  • 直接记录快照而非比较差异
  • 近乎所有的操作都在本地执行
  • 时刻保障数据的完整性
  • 多数操作仅添加数据
  • 文件的三种状态
    • 已修改(modified)
    • 已暂存(staged)
    • 已提交(committed)

Git文件状态

  • Git文件
    • 已被版本库管理的文件
  • 已修改
    • 在工作目录中修改Git文件
  • 已暂存
    • 对已修改的文件执行Git缓存操作,将文件存入暂存区
  • 已提交
    • 将已暂存的文件执行Git提交操作,将文件存入版本库

Git基本命令

  • git init 初始化版本库,将该文件夹纳入版本库进行管理,这条命令会在文件夹中生成隐藏.git文件

  • git add 将文件纳入git管理,将文件纳入管理后windows下显示如下

    git add text.txt
    

  • git rm --cached 将add到git的文件进行移除

    git rm --cached test.txt
    
  • git status 查看git状态,如下图所示,将test.txt文件添加后,查看状态,显示有add的新文件

    git status
    

  • git log 查看提交日志包括版本号及其他

    git的提交id(commit id) 是一个摘要值,这个摘要值实际上是个sha1计算出来的,不可逆

  • 对于user.name 和user.email来说,有三个地方可以设置

    • config文件夹(几乎不会使用) git config --system
    • ~/.gitconfig(很常用) git config --global
    • 针对于特定项目,.git/config文件中 git config --local
      • 删除使用git config --local --unset xxx

  • git rm xxx 删除文件,可以通过git reset HEAD xxx + git checkout – xxx两步来进行恢复,当未使用git rm而使用rm直接删除时可以使用git checkout – xxx 直接恢复

    • git rm : 删除了一个文件,将删除的文件纳入暂存区(stage),所以恢复时先将文件恢复到工作区,再用checkout将修改丢弃
    • rm: 将文件删除,并未纳入暂存区(stage),
    git rm test2.txt
    git reset HEAD test2.txt 将文件从缓存区恢复到工作区
    git checkout -- test2.txt 将修改丢弃
    
    // 当使用rm命令直接删除时
    git checkout -- test2.txt
    
  • git mv 原名称 新名称 可以给文件重新命名,git mv 与系统的mv之间的关系相当于 git rm 与rm的关系

  • git commit --amend -m ‘修正消息’ 修改上次提交的备注,与上次的提交是一次提交

  • git commit -am ‘xxxxxxx’ 将git add . 与git commit -m ‘xxxx’ 合二为一的命令

  • git log

    • -p 展开显示每次提交的内容差异

    • git log --graph --abbrev-commit 显示提交图形并以简略的方式显示日志

    • -n 仅显示最近的n次更新

    • –stat 仅显示简要的增改行数统计

    • –pretty=oneline 简单的方式显示提交

    • –pretty=format:“%h - % an,%ar :%s” 以相应的格式进行显示

  • git blame xxx 显示上次文件的修改者

.gitignore

  • 项目本身自带的设置文件不应该被提交到仓库
  • 创建文件.gitignore,凡是与该文件中的文件匹配的,就会被git所忽略.该文件支持正则以及通配符表达式
    • *.a 忽略所有.a结尾的文件
    • !lib.a 但lib.a除外
    • /TODO 仅仅忽略根目录下的TODO文件,不包括subdir/TODO
    • build/ 忽略build/目录下的所有文件
    • doc/*.txt 会忽略doc/notes.txt文件但不包括doc/server/arch.txt
    • /# 代表注释

分支

  • git branch 查看所有分支,*代表目前所处的分支

  • git branch xxx 创建新的分支,xxx代表分支名

  • git checkout 切换的分支名 切换分支

分支的重要操作

  • git删除分支 git branch -d xxx ,xxx代表分支名称,不能删除你当前所处的分支,当你所删除的分支有新增加的文件或者修改时git会提示不能删除,需要使用 git branch -D xxx

  • git checkout -b xxx 创建新的分支并切换到新的分支上

  • git merge xxx 将xxx分支合并到当前分支

  • git branch -v 显示所有分支的最近一次修改

  • git branch -v oldname newname 分支改名

  • git stash 将分支临时保存

  • git stash list 展示临时保存的list

  • git stash pop 将临时保存的状态取出,将原来保存的删除

  • git stash apply (stash 内容并不删除)

  • git stash apply stash@{0} 恢复指定位置的现场

  • git stash drop stash@{0} 删除指定位置的现场

分支的本质

  • 一个commit对象链:一条工作记录线, commit 提交对象会再多包含一个指向上次 commit 提交对象的指针。Git中默认的都会有一个分支,这个分支叫做 master,若干次提交之后,实际上有一个最新的 commit 对象,以及指向这个对象的master分支,伴随着每次提交,master 对象要做的就是不断指向新 commit 对象。

  • 分支就是指向提交的某个节点

  • HEAD指向的是当前分支,切换分支时HEAD指向到你切换的分支

  • master指向提交,指向分支的最近一次提交,当切换到新建的分支时,新的分支也指向当前最近的一次提交,同时HEAD指向当前所处的分支

分支的合并

  • 如果可能,合并分支时Git会使用fast-forward模式,在日志中不会增加新的提交id

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IrMxoQod-1632667613139)(D:\下载\学习\笔记\git学习\fast-forward模式.png)]

  • 在这种模式下,删除分支时会丢掉分支信息

  • 合并时加上-- no-ff参数会禁用fast-forward,这样会多出一个commit id

    • git merge --no-ff xxx,当提交上述命令时出现如下图所示,需要提交新的备注信息,表明这个合并触发了一次新的提交

  • 查看log

    • git log - -graph 以图形化的方式查看log

版本回退

  • 回退到上一版本

    • git reset --hard HEAD^(回退两个版本git reset --hard HEAD^,回退几个可以写几个),想返回上一版本只需要属于这个版本的前几个commitid既可以返回,只能往前走

    • git reset --hard HEAD~1,回退几个版本数字写几

    • git reset --hard commit_id,不用写全写前面四五个就可以

  • 返回到某一版本

    • git reflog,查看所有的操作日志(git log是查看的是提交日志),可以根据操作日志查询出的commitid来使用git reset --hard commit_id 来进行版本的切换,前后都可以

checkout 和reset的区别

  • git checkout – xxx xxx代表文件名,丢弃掉当前工作空间该文件的修改,使之与上一次暂存区的内容保持一致
  • git reset HEAD xxx ,xxx代表文件名,作用是:将之前添加到暂存区的内容从暂存区移到工作区

  • git branch commitid 按照某一个提交版本创建一个分支

标签

Git 标签

  • 新建标签,标签有两种:轻量级标签(lightweight) 与带有附注的标签(annotated)
  • 创建一个轻量级标签
    • git tag v1.0.1
  • 创建一个带有附注的标签
    • git tag -a v1.0.2 -m ‘release version’
  • 删除标签
    • git tag -d tag_name
  • 查看所有标签
    • git tag
  • 查找标签
    • git tag -l ‘名称’ (可以使用统配符)
  • 删除标签
    • git tag -d name 删除name标签

标签并不是与分支挂钩,不管哪个分支,不会随着分支的转移而变化

diff(差异性)

  • diff xxx1 xxx2

  • diff -u a b

  • git diff 暂存区与工作区文件的差别

  • git diff HEAD 比较工作区与提交的最近的那次提交比较

  • git diff --cached commit_id 比较暂存区与特定的commit_id的比较,没有commit_id即为比较最新的提交与暂存区的差别

JVM类加载子系统
JVM双亲委派机制及PC寄存器(程序计数器)
JVM虚拟机栈
JVM本地方法栈与堆

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值