Git学习笔记

这篇博客详细介绍了Git的安装、配置、仓库创建、工作区与暂存区理解、文件重命名、版本历史查看、HEAD与branch的关系、分支管理、合并与回滚、.git目录结构、git对象原理、Detached HEAD状态处理、.gitignore的使用、本地仓库备份、GitHub操作以及协同开发中的常见问题。通过实例展示了Git的各种操作和最佳实践,适合Git初学者及进阶学习者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一.安装

1.git下载地址:https://git-scm.com/downloads

2.在命令行检查是否安装成功:git --version

二.使用git之前的配置

1.配置user.name和user.email

2.git config的参数--local、--global、--system

3.显示config的配置,--list

三.建git仓库

1.把已有的项目代码纳入git管理

2.新建的项目直接用git管理

3.在新建的仓库配置local用户信息

4.在项目目录新增一个文件newfile

四.认识工作区和暂存区

1.暂存区处于版本管理流程的哪个部分?以及暂存区的好处?

2.四次提交练习

五.如何给文件重命名

1.直接按照commit思路进行重命名,以及有什么问题?

2.不想保留刚才的操作,即回滚,如何做?

3.一条命令如何重命名

六.用git log查看版本演变历史

1.一行显示历史

2.指定只查看最近的4次commit

3.查看本地有哪些分支

4.基于旧版本号415c5c8086sg1371创建一个新的分支temp

5.基于temp分支修改readme.md 文件

6.只看当前分支的历史

7.查看所有分支的历史

8.图形化展示所有分支的历史

9.指定输出temp分支的log

七.用图形界面工具gitk查看版本历史

1.gitk --all

八..git目录

1..git目录里面有什么?

2.HEAD文件里面是什么?

3.config文件里面是什么?

4.refs文件夹里面是什么?

5.refs/heads/master(或者temp)文件的内容是什么?

6.objects文件夹里面是什么?

九.commit, tree, blob三个git对象

1.git对象彼此关系

2.用git命令查看commit、tree、blob的类型和内容(hash值如上图所示)

3.新建的git仓库,有且仅有一个commit,仅包含/doc/readme,请问内含多少个tree,多少个blob?

十.”detached HEAD”状态

1. “detached HEAD” 状态是什么?需要注意什么?

2.如何用好分离头指针?

3.分离头指针场景的演示

十一. 理解HEAD和branch

1.创建新分支时,HEAD指向哪里?

2如何利用head比较两次提交的diff

十二. 删除不需要的分支

1.如何查看当前仓库有哪些分支?

2.删除分支

十三. 修改commit的message

1.修改最新commit的message

2.修改老旧的commit的message

十四. 将多个commit整理成1个

1.将连续4次的commit整理成1个?

2.将不连续的2个commit整理成1个

十五.比较不同区域的差异

1.比较暂存区和HEAD所指文件的差异?

2.比较工作区和暂存区所指文件的差异?

3.比较工作区和暂存区指定文件的差异?

十六. 让暂存区、工作区恢复

1.让暂存区恢复成和HEAD的一样

2.让工作区恢复成和暂存区一样

3.取消暂存区部分文件的更改

十七. 消除最近的几次提交commit

1.temp分支想要回到前两次的commit

十八. 查看不同commit的指定文件的差异

1.对两个commit或两个分支进行比较

2. 对两个commit或两个分支的指定文件进行比较

十九.删除文件

二十.开发中途,遇到紧急任务,需要保留当前工作状态,怎么做?

1.保存当前工作状态,包括工作区、暂存区等

2.在当前工作区处理紧急任务

3.恢复原来的状态

二十一.指定不需要git进行管理的文件

1.在仓库中新建文件“.gitignore”,只能叫这个文件名

2.在.gitignore文件中添加不需要git管理的文本或文件夹的通配符

二十二.将git仓库备份到本地

1.备份的传输协议

2.本地备份

3.将/c/Users/lincoco/Desktop/testgit/.git的变更同步到备份zhineng.git

二十三.关于github的使用

1.注册github账号

2.设置个人信息和帮助文档位置

3.用ssh连接github,设置公私钥

4.在github新建一个仓库

5.将本地仓库同步到github(在本地仓库执行)

6.协同开发时,不同的人在同一分支修改不同文件

7.协同开发时,不同的人在同一分支的同一文件相同位置进行修改,冲突如何处理

8.协同开发时,不同的人同时变更了文件名和文件内容如何处理?

9.协同开发时,不同的人同时变更了文件名如何处理?

10.在github删除一个仓库

二十四.慎用的git命令和操作

1.git checkout

2.git reset

3.git push -f

4.协同工作时,禁止将公共的分支拉到本地后作rebase操作(历史不能被更改)

二十五.如何在github搜索?

1.UI界面按条件搜索

2.在搜索框按创建时间搜索

3.直接在搜索框输入关键字,是什么搜索策略?

4.如何搜readme包含的关键字的仓库?

5.在搜索框中组合搜索

6.如何找到与搜索相关的help?


一.安装

1.下载地址:https://git-scm.com/downloads

2.在命令行检查是否安装成功:git --version

二.使用git之前的配置

1.配置user.name和user.email

#为git设置用户名和email

$git config --global user.name ‘your_name’

$git config --global user.email ‘your_email@domain.com’

2.git config的参数--local、--global、--system

$git config --local:只对某个仓库有效

$git config --global:对当前用户所有仓库有效

$git config --system:对系统所有登录的用户有效

3.显示config的配置,--list

$git config --list --local

$git config --list --global

$git config --list --system

三.建git仓库

1.把已有的项目代码纳入git管理

$cd 项目所在路径

$git init

2.新建的项目直接用git管理

$cd 某个文件夹

$git init project_name  #会在当前路径下创建和项目名称同名的文件夹

$cd project_name

3.在新建的仓库配置local用户信息

按第二节命令

4.在项目目录新增一个文件newfile

$git add newfile

$git commit -m ‘add a newfile’

四.认识工作区和暂存区

1.暂存区处于版本管理流程的哪个部分?以及暂存区的好处?

工作目录的变更需要先添加到暂存区,再提交。尝试两套方案时,先把已完成的第一套方案放入暂存区,在试第二套方案,如果第二套方案不行,那么暂存区的第一套方案可以覆盖第二套方案;暂存区的内容已经被git管理了;暂存区的内容如果不合适可以回退。

2.四次提交练习

  • # 加入index.html和image/*

$git status

$git add index.html images

$git commit -m ‘add index + log’

  • # 加入style/style.css

$git add style

$git commit -m ‘Add style.css’

$git log

  • # 加入js文件

$git add js

$git commit -m ‘Add js’

  • #同时修改index.html和css文件

$git add -u #将被git管理的所有变更过的文件一起提交到暂存区

$git status

$git commit -m ‘Add message’

五.如何给文件重命名

1.直接按照commit思路进行重命名,以及有什么问题?

$mv readme readme.md  #删除了readme,并且新增了readme.md

$git add readme.md    #将readme.md加入git管理

$git rm readme   #将readme从git管理删除

$git status  #显示:readme—>readme.md

2.不想保留刚才的操作,即回滚,如何做?

$git reset --hard    #该命令较危险,工作区和暂存区所有的变更都会被清理掉

$git status  #此时工作路径下都是clean的

$git log   #且没有破坏git的历史

3.一条命令如何重命名

$git mv readme readme.md     #显示:readme—>readme.md

$git commit -m ‘Move readme to readme.md’  #直接commit,不需要add

六.用git log查看版本演变历史

1.一行显示历史

$git log --oneline

2.指定只查看最近的4次commit

$git log -n4 --oneline

3.查看本地有哪些分支

$git branch -v

4.基于旧版本号415c5c8086sg1371创建一个新的分支temp

$git checkout -b temp 415c5c8086sg1371

5.基于temp分支修改readme.md 文件

$git commit -am ‘Add test’      #-am 表示直接将工作区的内容提交到历史版本库中,不需要add

6.只看当前分支的历史

$git log

7.查看所有分支的历史

$git log --all

8.图形化展示所有分支的历史

$git log --all --graph

9.指定输出temp分支的log

$git log --oneline temp

七.用图形界面工具gitk查看版本历史

1.gitk --all

八..git目录

1..git目录里面有什么?

$cd .git

$ls -al

2.HEAD文件里面是什么?

$cat HEAD

  • 里面是一个引用,指向refs/heads/master,说明当前仓库正在工作的分支是master
  • 切换分支(git checkout temp)后,HEAD文件内的内容就会发生变化,指向temp

3.config文件里面是什么?

存储的local的config信息,如果直接在config文件内改变email或user的话,依然生效

4.refs文件夹里面是什么?

包括tags(标签)和heads(分支)

5.refs/heads/master(或者temp)文件的内容是什么?

$git cat-file -t 6a9802fdbdcd   #查看6a9802fdbdcd是什么类型,结果显示是commit类型,表示master指针指向的commit

$git cat-file -p 6a9802fdbdcd   #查看6a9802fdbdcd指向的内容

6.objects文件夹里面是什么?

进入objects中的98文件夹

blob指文件对象

九.commit, tree, blob三个git对象

1.git对象彼此关系

一个commit对应一棵tree,这个tree代表取出某个commit,这个commit对应一个视图,这个视图里面存放的一个快照,这个快照的集合里面存放了当前commit对应的本项目仓库的所有的文件夹以及文件的一个快照。一个文件夹也是一个tree,一个文件是一个blob,在git中,如果两个文件的内容完全一样,那么这两个文件指向同一个blob。

2.用git命令查看commit、tree、blob的类型和内容(hash值如上图所示)

$git cat-file -p 415c5c #显示上图蓝色区域部分

$git cat-file -p 912fa6 #显示上图黄色第一块区域

$git cat-file -p 6ad4c6 #显示上图绿色第一块区域,blob,文件内容,是一个html

3.新建的git仓库,有且仅有一个commit,仅包含/doc/readme,请问内含多少个tree,多少个blob?

$git init count_git_objects

$cd count_git_objects

$mkdir doc

$cd doc

$echo “hello, world”>readme

$cd ..

$find .git/objects -type f      #空的

$git add doc

$ find .git/objects -type f     #有一个对象,表示新的东西加入到暂存区

$git cat-file -t 2dadwd23     #是个blob

$ git cat-file -p 2dadwd23    # hello, world

$git commit -m ‘Add readme’

$ find .git/objects -type f   #类型是文件的一共有4个,然后用cat-file查看类型和内容,一个commit,一个是blob,两个tree。

 

十.”detached HEAD”状态

1. “detached HEAD” 状态是什么?需要注意什么?

表示正工作在一个没有分支的状态下,比如不小心checkout到一个历史commit上,此时可以基于当前的commit继续变更或者commit,但是如果此时需要切到另一个分支master上修复一个bug,那么此时切分支时,刚刚工作的没有分支的状态上的commit就可能被git当作垃圾清理掉。这是分离头指针的危险的地方。

2.如何用好分离头指针?

有时想做一些尝试性的变更。可以用分离头指针,最后若想保留更改,那么可以根据warning 提示

3.分离头指针场景的演示

$git log                #找到一个历史commit sddqde121

$git checkout sddqde121    #进入分离头指针状态,detached HEAD

  • #修改一个文件

$git commit -am ‘Background to green’

$git log  #发现这次commit只跟(HEAD)绑定在一起,而不是某个分支

十一. 理解HEAD和branch

1.创建新分支时,HEAD指向哪里?

$git checkout -b fix_readme temp #基于temp分支创建新分支fix_readme,并且切到了新的分支,此时HEAD指向fix_readme、temp

$cat .git/HEAD   #refs/heads/fix_readme

2如何利用head比较两次提交的diff

$git diff HEAD HEAD~1      #将HEAD指向的commit与HEAD上一级指向的commit作对比

十二. 删除不需要的分支

1.如何查看当前仓库有哪些分支?

$git branch -av

2.删除分支

$git branch -d fix_readme   # -D强制删除

十三. 修改commit的message

1.修改最新commit的message

$git commit --amend #进入vim编辑器,修改message

$git log -1

2.修改老旧的commit的message

$git rebase -i zqh3761zqiq    # hash值是要变的commit的父亲,进入vim编辑器,读注释,改:reword/r,保存并退出,接着git会弹出一个新的交互界面,在上面更新message,再保存退出。此时

十四. 将多个commit整理成1个

1.将连续4次的commit整理成1个?

$git log --graph

$git rebase -i da123rqbdh #hash值是前4次commit的父亲,进入vim编辑器,读注释,选择4个中的一个commit为pick,其他三个修改为:squash/s,保存并退出。然后会进入一个新的vim编辑器,在上面第一行和第二行之间加入合并的message。再保存退出。

$git log --graph

2.将不连续的2个commit整理成1个

例如将最近一次commit和最远一次commit整理成一个

$git log --graph

Git rebase -i f2ed321 #由于最远commit没有父亲,因此这里的hash值是最远commit。进入vim编辑器,将最远commit按照格式pick在第一行,将最近一次commit的pick信息剪切到第二行,并把pick改成squash/s,保存并退出。出现warning,利用git status按照提示执行以下命令

$git rebase --continue #进入vim编辑器,在上面第一行和第二行之间加入合并的message。再保存退出。

$git log --graph

十五.比较不同区域的差异

1.比较暂存区和HEAD所指文件的差异?

$git status #工作区有一个文件被修改了

$git diff --cached

  • #再次在工作区修改一下

$git add index.html

$git diff --cached

$git commit -m ‘Add the first command with config’

2.比较工作区和暂存区所指文件的差异?

$git diff    #呈现工作区和暂存区所有的文件的差异

3.比较工作区和暂存区指定文件的差异?

$git diff -- readme.md #指定readme.md的差异,后面也可以添加一群文件,以空格隔开

十六. 让暂存区、工作区恢复

1.让暂存区恢复成和HEAD的一样

$git status #提示对于暂存区的内容,可以使用“git reset HEAD <file>…”命令让暂存区的指定文件恢复成与HEAD的一样

$git reset HEAD #将暂存区所有的变更都取消,保持与HEAD一致

$git diff --cached #此时暂存区与HEAD之间的差异应为 空

$git status #刚才的变更恢复到了工作区。疑问:会跟工作区发生冲突吗?

2.让工作区恢复成和暂存区一样

$git status  #提示 用“git checkout -- <file>..”命令取消工作区的变更

$git checkout -- index.html # 将工作区的index.html文件恢复成和暂存区一样

3.取消暂存区部分文件的更改

$git reset HEAD -- style/style.css readme # style/style.css和 readme这两个文件都从暂存区撤销出来了

十七. 消除最近的几次提交commit

1.temp分支想要回到前两次的commit

$git checkout temp

$git log --graph

$git reset --hard 52djqwdoa #HEAD将指向hash值为52djqwdoa的commit,并且暂存区和工作区都将与该commit保持完全一致。慎用

十八. 查看不同commit的指定文件的差异

1.对两个commit或两个分支进行比较

$git log -n8 --all –graph    #查看最近8次commit的情况

$git diff temp master       #temp或者master可以换成对应的commit的hash值

2. 对两个commit或两个分支的指定文件进行比较

$git diff temp master -- index.html

十九.删除文件

$git rm readme

$git commit -m “remove readme”

二十.开发中途,遇到紧急任务,需要保留当前工作状态,怎么做?

1.保存当前工作状态,包括工作区、暂存区等

$git stash #保存当前状态进入一个堆栈

$git stash list  #查看当前stash列表

$git status #当前工作区是干净的,clean

2.在当前工作区处理紧急任务

该修改修改,该提交提交

3.恢复原来的状态

$git stash apply #恢复状态,stash堆栈中的内容不删除

$git stash pop #恢复状态,stash堆栈中的内容删除

二十一.指定不需要git进行管理的文件

1.在仓库中新建文件“.gitignore”,只能叫这个文件名

2.在.gitignore文件中添加不需要git管理的文本或文件夹的通配符

例如,在该文件中,加入“package”表示不管理名为“package”的文件或文件夹;加入“package/”表示不管理文件夹“package”下的所有文件。

二十二.将git仓库备份到本地

1.备份的传输协议

2.本地备份

$cd backupForGit

$git clone –bare file:///c/Users/lincoco/Desktop/testgit/.git zhineng.git #--bare表示备份一个裸仓库,不包括工作目录

3.将/c/Users/lincoco/Desktop/testgit/.git的变更同步到备份zhineng.git

$cd testgit

$git remote -v #查看当前仓库关联的远端仓库

$git remote add zhineng file:///c/Users/lincoco/Desktop/backupForGit/zhineng.git  #将当前仓库与zhineng.git建立remote关联,命名为zhineng

$git remote -v

#在当前仓库作变更

$git push zhineng #将当前仓库的变更push到远端仓库zhineng

二十三.关于github的使用

1.注册github账号

注册网址:https://github.com

点击sign up进行注册;点击sign in 进行登录

2.设置个人信息和帮助文档位置

页面右上角头像处

3.用ssh连接github,设置公私钥

本机的公私钥表明了本机的身份,本机的公钥可以配置在多个git仓库中。

  • #查看本机是否已生成ssh key

$cd ~/.ssh  #若该文件夹中存在id_rsa文件证明已生成公司钥,直接 cat id_rsa.pub就可以获取公钥

  • #若本机不存在ssh key,生成公私钥

$ssh-keygen -t rsa -b 4096 -C “email地址”

接下来一路回车

  • #复制公钥

#将公钥粘贴到github

在github右上角头像处点击“Settings”,再点击页面左侧“SSH and GPG keys”,点击“New SSH key”,黏贴。

#用SSH协议,在本机向github push时不用输入用户名密码。

4.在github新建一个仓库

  • 在github首页左侧点击绿色按钮“new repositories”
  • 初始化仓库,最后点击最下方绿色按钮
  • 跳转到仓库详情页

5.将本地仓库同步到github(在本地仓库执行)

  • $git remote -v #查看该仓库的远端仓库有哪些
  •  将github的仓库添加为本地仓库的远端仓库,

$git remote add github git@github.com:lincoco/newRepositories.git #github是给这个关联关系取的名字,后面的ssh链接是在github仓库复制的ssh协议链接

$git remote -v #查看远端仓库有哪些,发现多了github

  • $git push github --all #向远端仓库github push 所有本地分支;此时,master分支push会报错,其他分支可以正常push

原因如下:

  1. master分支在push之前,需要首先git fetch一下,获取远端存在本地不存在的文件
  2. 关于fast-forward:在master分支git fetch以后,查看本地的commit树(gitk --all),可以看到remotes/github/master和master两个没有共同历史的分支,是两个独立的树;这种情况下,本地master不能push到远端master,git认为本地master没有基于remote/github/master分支变更

解决方案:

$git branch -va #查看所有分支,包括远端仓库的分支

$git checkout master #git切换到master分支

$git merge github/master #与远端github的master分支进行合并,报错:两个历史不相干的分支无法进行合并,用 git merge -h查看有什么办法可以合并

$git merge -h #

$git merge --allow-unrelated-histories github/master #与远端github的master分支进行合并,此时的本地master有两个parent:远端master和原来的master

$git push github master #将本地master同步到github,此时查看github发现已更新

6.协同开发时,不同的人在同一分支修改不同文件

  • 目前开发状态:github有一仓库newRepositories.git;本地有一仓库testgit与其是remote关系,有另一仓库testgit_01是从newRepositories.git clone下来的仓库;这两个本地仓库的用户名和email是不同的,代表两个共同维护newRepositories.git的开发者。
  • 目前需要完成的工作:在github新建一个分支feature/fix_package;该分支由两个开发者同时维护;testgit修改readme文件;testgit01修改package文件;
  • 在github新建分支feature/fix_package

  • 在testgit 拉取github最新分支

$git fetch github

$git branch -av #查看当前testgit有哪些分支,发现新增远程fix_package分支

  • 在testgit基于github/feature/fix_package新建本地分支feature/fix_package

$git checkout -b feature/fix_package github/feature/fix_package #此时testgit自动切换到新建的分支,并且该分支与远程的feature/fix_package建立了联系

  • 在testgit仓库,修改readme文件并push到github

$vi readme

$git add -u

$git commit -m ‘tories to tory in readme’

$git push github

  • 在testgit_01基于origin/feature/fix_package新建本地分支feature/fix_package

$git checkout -b feature/fix_package origin/feature/fix_package

  • 在testgit_01基于仓库,修改package文件并push到github

$vi package

$git commit -am 'package to packages in package'

$git push #此时报错如下,origin(github)的该分支与本地有差异,需要先fetch一下

$git fetch

$git push #此时push,依然报错如下,这是当前本地的分支相较远程分支是滞后的,少一个commit,因此接下来作一次merge的操作

$git merge origin/feature/fix_package

$git push #push成功

  • 查看github的 feature/fix_package的分支,可以看到两个开发者提交的内容都已更新

7.协同开发时,不同的人在同一分支的同一文件相同位置进行修改,冲突如何处理

  • 开发状态接第6条,在此基础上,testgit仓库在package文件的第二行添加“python package”;testgit_01文件在package文件的第二行添加“java package”
  • 在testgit仓库,修改package,在package文件的第二行添加“python package”,并push

$git pull

$vi package

$git commit -am 'add python package in package'

$git push

  • 在testgit_01仓库,修改package,在package文件的第二行添加“java package”,并push

$vi package

$ git commit -am 'add java package in package'

$git push #报错,冲突了,如下:

$git pull #用git pull,提示merge冲突

##此时手动进入文件进行修改

$vi package  #冲突显示如下,从head开始,对该文件进行修改并保存

$git status #查看状态

$ git commit -am 'resolved the conflict by hand in package'

$git status

$git push #成功

8.协同开发时,不同的人同时变更了文件名和文件内容如何处理?

  • 开发状态接第6条,在此基础上,testgit仓库将package文件的文件名修改为packages,并push;testgit_01对package文件的内容作修改,并push
  • 在testgit仓库,变更文件名

$git mv package packages

$git commit -am ‘Mv package to packages’

$git push

  • 在testgit_01仓库,修改package文件中的内容

$vi package

$git commit -am ‘add “modified the context” in package’

$git push #报错

$git pull #本地文件名已更新,同时修改的文件内容也保存(这是git的一个优点,能够get到文件名的变更)

$git push #将更改的文件内容push到github

9.协同开发时,不同的人同时变更了文件名如何处理?

  • 开发状态接第8条,在此基础上,testgit仓库将packages文件的文件名修改为packages1,生成commit,push到github;testgit_01将packages文件的文件名修改为packages2,并push,最终协商用packages1作为文件名。
  • 同时git pull两个仓库

$git pull

  • 在testgit仓库,修改文件名,并commit和push

$git mv packages packages1

$git commit -am ‘mv packages to packages1’

$git push

  • 在testgit_01仓库,修改文件名,并commit和push

$ git mv packages packages2

$git commit -am ‘mv packages to packages2’

$git push #报错如下,需要先拉去远程仓库的更新

  • 处理冲突

#用git pull 拉去远程更新,并合并

$git pull #报错,冲突

$git status #查看当前状态,发现packages被删除,同时新增了两个文件,一个是本地仓库改的packages2,另一个是远程仓库拉去下来的packages1

$ls -al #查看当前工作区的文件,发现两个文件同时存在

$ diff packages1 packages2 #查看两个文件的不同,输出为空,表明两个文件内容完全一样

#协商后,决定还是选用文件名packages1

$git rm packages

$ git rm packages2

$git add packages1

$git commit -am ‘decide to mv packages to packages1’ 

$git push #成功

10.在github删除一个仓库

  • 在仓库详情页点击Settings

  • 拉到页面最下方,点击“Delete this repository”

二十四.慎用的git命令和操作

1.git checkout

2.git reset

3.git push -f

在团队协同工作时需要强行禁止

4.协同工作时,禁止将公共的分支拉到本地后作rebase操作(历史不能被更改)

二十五.如何在github搜索?

1.UI界面按条件搜索

网址:https://github.com/search/advanced

界面:

2.在搜索框按创建时间搜索

created:<2019-12-01

3.直接在搜索框输入关键字,是什么搜索策略?

搜的是仓库的名称和描述

4.如何搜readme包含的关键字的仓库?

在搜索框中输入:git 资料 in:readme  #查询readme包含关键字 “git”、“资料”的仓库

5.在搜索框中组合搜索

git 资料 in:readme stars:>50 #readme中包含“git”、“资料”并且stars数多余50的仓库

组合条件之间用空格隔开

6.如何找到与搜索相关的help?

网址:https://help.github.com/en/github/searching-for-information-on-github/

 

学习资料:

1.Git官网中文教程:https://git-scm.com/book/zh/v2

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值