Git

git开源工具使用教程

​ git常用的版本管理工具。

​ 文章较长,但是难度不大,主要内容都在目录里,学习需要看一下演示,如果你和我一样是小白,跟着我的走一遍,保证你正常掌握并能够使用它。一定要耐心看完欧!

​ 别忘了,关注、点赞、收藏!

git 介绍

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

Git is easy to learn and has a tiny footprint with lightning fast performance. It outclasses SCM tools like Subversion, CVS, Perforce, and ClearCase with features like cheap local branching, convenient staging areas, and multiple workflows.

​ 这是来自git官网的独家介绍,Git 是一个免费和开源分布式版本控制系统,旨在以速度和效率处理从小型到非常大型项目的所有问题。

​ 既然有分布式的,是不是应该也有个集中式的呢?

​ 你猜的很对,比如SVN,它就是一个集中式的版本控制工具。

​ 简单讲一下,集中式:

image-20210625114029883

​ 它是一个C/S结构,每个用户可以将源代码从仓库中拉下来。编码之后再提交上去,ser回自动合并,当两个客户端同时修改并提交了同一段代码之时,服务器不能区分先后问题,只能用户自己进行控制更改。

​ 当服务器挂了,着了。之后,用户可能就只用最新版的代码了。为什么说只有最新版,后面会细细阐述。如果没有网,当用户做了一个任务,想做下一个任务,想要提交,对不起,没网提交不了。

​ 下来说一下分布式:

image-20210625115936344

​ 分布式呢,就是当用户拉去时候就直接将远程仓库的所有的都拉下来在本地。

​ 我们可以在本地提交,也可以提交到远程仓库。没有网络也没有关系。

​ 当服务器挂了,着了,数据都没有了,没有关系,把本地的推上去一个,就好了。all eventhing local.

git安装

​ 下来我们安装和使用一下git:

win

​ 在windows系统中:

​ 我们可以在官网中下载到它的安装包,进行安装。

Git - Downloading Package (git-scm.com)

​ 安装完成之后,右键可以看到git bash here

image-20210625122131336

liunx

​ 在Liunx中,我们可以通过liunx命令下载安装:

​ 以deepin为例:

sudo apt-get install git

​ 安装成功之后:

git --version123
stu@stu-PC:~/git_demo$ git --version
git version 2.11.0
stu@stu-PC:~/git_demo$ ls
git基础知识

​ git一共有四个工作域

​ 本地三个:工作区(working directory),暂存区(stage/index),资源库(repository). 加上一个远程服务器上的git仓库(remote directiry)就是四个工作域。

​ 其工作关系如下:

image-20210625170412836

  • Workspace:工作区,就是平常写代码地方
  • Index/stage:暂存区,把你更改的代码暂存在该区域,等待提交到仓库
  • Repository:仓库区,就是安全存放数据的位置,在这里有所有的版本数据。
  • Remote:远程仓库,托管代码的服务器
git常用命令以及使用

​ 下面的操作,liunx和win是一样的。我以deepin为例:

git init 初始化
//	首先创建一个文件夹
mkdir git_demo
//	进入文件夹
cd git_demo
//	初始化仓库
git init

​ 初始化之后,执行一下:

ls -a
stu@stu-PC:~/git_demo$ ls -a
.  ..  .git
stu@stu-PC:~/git_demo$ 

​ 进入.get文件我们看到很多的文件,这些就是版本控制的信息

stu@stu-PC:~/git_demo$ cd .git
stu@stu-PC:~/git_demo/.git$ ls
branches  config  description  HEAD  hooks  info  objects  refs
stu@stu-PC:~/git_demo/.git$ 

​ 我们先写以一个main.c文件

vi main.c
写入:
#include <stdio.h>

status 查看仓库状态

git status

位于分支 master

初始提交

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)

	main.c

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
git add [filename] 添加文件到暂存区
stu@stu-PC:~/git_demo$ git add main.c
stu@stu-PC:~/git_demo$ git status
位于分支 master

初始提交

要提交的变更:
  (使用 "git rm --cached <文件>..." 以取消暂存)

	新文件:   main.c

stu@stu-PC:~/git_demo$ 

现在我们已经将文件添加到了 ’暂存区‘

git commit -m "[注释]"提交版本到仓库

第一次使用git命令提交代码之前,需要设置一下用户名及邮箱,之后就不需要了:

stu@stu-PC:~/git_demo$ git config --global user.name "name"
stu@stu-PC:~/git_demo$ git config --global user.email "1445xxxxx@qq.com"
//提供自己的邮箱和姓名即可
-----------------------------------------------------------------------------
stu@stu-PC:~/git_demo$ git commit -m "creat main.c"
[master(根提交) bdc74a7] creat main.c
 1 file changed, 6 insertions(+)
 create mode 100644 main.c
stu@stu-PC:~/git_demo$ git status
位于分支 master
无文件要提交,干净的工作区
stu@stu-PC:~/git_demo$ 
//-m "注释"  大概告诉其他人做了什么

​ 对main.c进行修改,再修改两次并提交
​ 在这里做过多的展示。

git log 查看你的提交记录
stu@stu-PC:~/git_demo$ git log
commit 60dd7937cdf0b72f07e08e7c297cf71b7fd5a40c
Author: peter_bo <1445034376@qq.com>
Date:   Fri Jun 25 20:22:33 2021 +0800

    compplete hello world!

commit c3174bbf00dd14e62509238b8bc1e506b02b3662
Author: peter_bo <1445034376@qq.com>
Date:   Fri Jun 25 20:17:48 2021 +0800

    add head file

commit bdc74a763fae2c42212258c5bc77135f876114cd
Author: peter_bo <1445034376@qq.com>
Date:   Fri Jun 25 17:34:49 2021 +0800

    creat main.c
stu@stu-PC:~/git_demo$ 

可以从提交日志中看到

  • commit:通过hash算法计算出来的哈希值,唯一标识一个版本
  • author:展示作者 当你在公司提交了bug 想甩锅不可能
  • Date:提交时间
  • 最后一行:就是我们写的注释啦
git diff HEAD 比较和最新版本的差距
stu@stu-PC:~/git_demo$ cat main.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
	printf("hello world\n");
	exit(0);
}
stu@stu-PC:~/git_demo$ vi main.c
stu@stu-PC:~/git_demo$ cat main.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
	printf("hello git\n");
	printf("hello world\n");
	exit(0);
}
stu@stu-PC:~/git_demo$ git diff HEAD	//HEAD 可以省略
diff --git a/main.c b/main.c
index 7e1cb07..336caa0 100644
--- a/main.c
+++ b/main.c
@@ -3,6 +3,7 @@
 
 int main()
 {
+       printf("hello git\n");		//注意看这里多了+
        printf("hello world\n");
        exit(0);
 }
git checkout [filename] 放弃对工作区代码的修改
stu@stu-PC:~/git_demo$ cat main.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
	printf("hello git\n");
	printf("hello world\n");
	exit(0);
}
stu@stu-PC:~/git_demo$ git checkout main.c
stu@stu-PC:~/git_demo$ cat main.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
	printf("hello world\n");
	exit(0);
}
stu@stu-PC:~/git_demo$ 
git reset HEAD [filename] 撤销缓存
stu@stu-PC:~/git_demo$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	修改:     main.c

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
stu@stu-PC:~/git_demo$ git add main.c
stu@stu-PC:~/git_demo$ git status
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

	修改:     main.c

stu@stu-PC:~/git_demo$ git reset HEAD main.c
重置后取消暂存的变更:
M	main.c
stu@stu-PC:~/git_demo$ 
git reset --hard HEDA^ 回退版本

简单介绍一下,回退的数据结构:

image-20210626100504044

存在一个master指针指向当前的版本,HEAD指针指向master。

git reset --hard HEAD^ // 一个^ 回退一个版本 想来几个来几个

master 带着 HEAD 同时下移

stu@stu-PC:~/git_demo$ git log
commit ca744a9e63bec3896152665635826feae50a19d6
Author: peter_bo <1445034376@qq.com>
Date:   Fri Jun 25 21:45:10 2021 +0800

    complete hello world

commit 433906711633e06f7d1cf832e9f623358d001ca2
Author: peter_bo <1445034376@qq.com>
Date:   Fri Jun 25 21:44:08 2021 +0800

    add head file

commit 431e3655f0a7c10586b6ac506cefb1b13952243e
Author: peter_bo <1445034376@qq.com>
Date:   Fri Jun 25 21:43:04 2021 +0800

    creat main.c
-----------------------------------------------
stu@stu-PC:~/git_demo$ git reset --hard HEAD^
HEAD 现在位于 4339067 add head file
-----------------------------------------------
stu@stu-PC:~/git_demo$ git log
commit 433906711633e06f7d1cf832e9f623358d001ca2
Author: peter_bo <1445034376@qq.com>
Date:   Fri Jun 25 21:44:08 2021 +0800

    add head file

commit 431e3655f0a7c10586b6ac506cefb1b13952243e
Author: peter_bo <1445034376@qq.com>
Date:   Fri Jun 25 21:43:04 2021 +0800

    creat main.c

git reflog 查看你对版本库的所有操作

如上 git log 只能看到你当前版本的操作日志,但是我现在想看,在这个版本之后有没有版本呢!

stu@stu-PC:~/git_demo$ git reflog
4339067 HEAD@{0}: reset: moving to HEAD^
ca744a9 HEAD@{1}: commit: complete hello world
4339067 HEAD@{2}: commit: add head file
431e365 HEAD@{3}: commit (initial): creat main.c
git reset --hard [ID] 跳到任意版本

现在我们就一起起跳,想去那去那

stu@stu-PC:~/git_demo$ git reflog
4339067 HEAD@{0}: reset: moving to HEAD^
ca744a9 HEAD@{1}: commit: complete hello world
4339067 HEAD@{2}: commit: add head file
431e365 HEAD@{3}: commit (initial): creat main.c

stu@stu-PC:~/git_demo$ git reset --hard ca744a9   //这个ID就是上面的第一列
HEAD 现在位于 ca744a9 complete hello world

为什么写这么短呢!

可以是完整的hash值,他认为现在通过这几位,这些已经可以区分开,不同的版本了。

git rm [filename] 删除一个文件

需要提交到版本库中删除

stu@stu-PC:~/git_demo$ ls
main.c  max.c
stu@stu-PC:~/git_demo$ git status
位于分支 master
无文件要提交,干净的工作区
stu@stu-PC:~/git_demo$ git rm max.c
rm 'max.c'
stu@stu-PC:~/git_demo$ git status
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

	删除:     max.c

stu@stu-PC:~/git_demo$ git commit -m "delete max file"
[master 87b526b] delete max file
 1 file changed, 1 deletion(-)
 delete mode 100644 max.c
stu@stu-PC:~/git_demo$ git status
位于分支 master
无文件要提交,干净的工作区
stu@stu-PC:~/git_demo$ ls
main.c
stu@stu-PC:~/git_demo$ 
git 分支操作
git branch 查看分支
stu@stu-PC:~/git_demo$ git branch
* master
stu@stu-PC:~/git_demo$ 
git branch [branch _name] 创建分支
stu@stu-PC:~/git_demo$ git branch
* master
stu@stu-PC:~/git_demo$ git branch dev
stu@stu-PC:~/git_demo$ git branch
  dev
* master					//'*' 表示当前所在分支
stu@stu-PC:~/git_demo$ 
git checkout [branch_name] 切换分支
stu@stu-PC:~/git_demo$ git checkout dev
切换到分支 'dev'
stu@stu-PC:~/git_demo$ git branch
* dev
  master
stu@stu-PC:~/git_demo$ 
git branch -d [branch_name] 删除分支

//删除分支的时候,是不能删除当前所在分支的

tu@stu-PC:~/git_demo$ git branch
  dev
* master
stu@stu-PC:~/git_demo$ git branch -d dev
已删除分支 dev(曾为 87b526b)。
stu@stu-PC:~/git_demo$ 
git checkout -b [branch_name] 切换并创建分支
stu@stu-PC:~/git_demo$ git branch
* master
stu@stu-PC:~/git_demo$ git checkout -b dev
切换到一个新分支 'dev'
stu@stu-PC:~/git_demo$ git branch
* dev
  master
stu@stu-PC:~/git_demo$ 
git merge [branch_name] 合并分支

合并时可能产生冲突,需要解决冲突

有时需要禁止快速合并,可执行:git merge --no-ff -m ‘[注释]’ [branch_name]

stu@stu-PC:~/git_demo$ git branch
* dev
  master
stu@stu-PC:~/git_demo$ cat main.c
#include <stdio.h>
#include <stdlib.h>

int add(int x,int y)
{
	return x+y;
}

int main()
{
	printf("hello world\n");
	exit(0);
}
stu@stu-PC:~/git_demo$ git checkout master
切换到分支 'master'
stu@stu-PC:~/git_demo$ cat main.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
	printf("hello world\n");
	exit(0);
}
stu@stu-PC:~/git_demo$ git merge dev
更新 87b526b..a62dbf8
Fast-forward
 main.c | 5 +++++
 1 file changed, 5 insertions(+)
stu@stu-PC:~/git_demo$ cat main.c
#include <stdio.h>
#include <stdlib.h>

int add(int x,int y)
{
	return x+y;
}

int main()
{
	printf("hello world\n");
	exit(0);
}
stu@stu-PC:~/git_demo$
冲突展示
stu@stu-PC:~/git_demo$ git branch
  dev
* master
stu@stu-PC:~/git_demo$ git merge dev
自动合并 main.c
冲突(内容):合并冲突于 main.c
自动合并失败,修正冲突然后提交修正的结果。
stu@stu-PC:~/git_demo$ vi main.c
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 int add(int x,int y)
  5 {
  6     return x+y;
  7 }
  8 <<<<<<< HEAD
  9 int max(int x,int y)
 10 {
 11     return x>y?x:y;
 12 }
 13 int main()
 14 {
 15     int r2 = max(5,2);
 16 =======
 17 int main()
 18 {
 19     int r1= add(2,3);
 20     printf("%d\n",r1);
 21 >>>>>>> dev
 22     printf("hello world\n");
 23     exit(0);
 24 }
// 需要我们自己解决冲突、调整位置
// 调整之后,提交
stu@stu-PC:~/git_demo$ git add main.c
stu@stu-PC:~/git_demo$ git commit -m "解决冲突"
[master ab0ef4e] 解决冲突
git log --pretty=oneline 日志一行现实节省空间
stu@stu-PC:~/git_demo$ git log --pretty=oneline
ab0ef4e5e237ad70676d50f4c1b6bc2341c9a0c0 解决冲突
dc92213d1898ca4249508705dcb1427e10b02d1c add func max
3a165728007a9c3ff9d358a9366302891a468202 use add
a62dbf868289aaddb8d9fa2cd483144df6486175 add func add
87b526ba31d1ee9440c1ab25d28ee39ebdc8d6fe delete max file
2ccb8fa98a96558b2308a7261b7320d96c9f454b add max file
ca744a9e63bec3896152665635826feae50a19d6 complete hello world
433906711633e06f7d1cf832e9f623358d001ca2 add head file
431e3655f0a7c10586b6ac506cefb1b13952243e creat main.c
stu@stu-PC:~/git_demo$ 
git log --graph 以图表形式显示分支
stu@stu-PC:~/git_demo$ git log --graph
*   commit ab0ef4e5e237ad70676d50f4c1b6bc2341c9a0c0
|\  Merge: dc92213 3a16572
| | Author: bo_peter <z1445034376@163.com>
| | Date:   Sun Jun 27 14:02:11 2021 +0800
| | 
| |     解决冲突
| | 
| * commit 3a165728007a9c3ff9d358a9366302891a468202
| | Author: bo_peter <z1445034376@163.com>
| | Date:   Sun Jun 27 13:12:01 2021 +0800
| | 
| |     use add
| | 
* | commit dc92213d1898ca4249508705dcb1427e10b02d1c
|/  Author: bo_peter <z1445034376@163.com>
|   Date:   Sun Jun 27 13:56:43 2021 +0800
|   
|       add func max
| 
* commit a62dbf868289aaddb8d9fa2cd483144df6486175
| Author: bo_peter <z1445034376@163.com>
| Date:   Sun Jun 27 10:55:09 2021 +0800
| 
|     add func add
| 
* commit 87b526ba31d1ee9440c1ab25d28ee39ebdc8d6fe
| Author: bo_peter <z1445034376@163.com>
| Date:   Sun Jun 27 09:29:57 2021 +0800
:
git stash 保存现场

当前工作区代码被修改,未提交时,是不能切换工作区的,需要现场保护

stu@stu-PC:~/git_demo$ cat main.c
#include <stdio.h>
#include <stdlib.h>

int add(int x,int y)
{
	return x+y;
}
int main()
{
	int r1= add(2,3);
	printf("%d\n",r1);
	printf("hello world\n");
	exit(0);
}
stu@stu-PC:~/git_demo$ vi main.c
stu@stu-PC:~/git_demo$ cat main.c
#include <stdio.h>
#include <stdlib.h>

int add(int x,int y)
{
	return x+y;
}
int min(int x,int y)
{
	return x<y?x:y;
}
int main()
{
	int r1= add(2,3);
	printf("%d\n",r1);
	printf("hello world\n");
	exit(0);
}
stu@stu-PC:~/git_demo$ git checkout master
error: 您对下列文件的本地修改将被检出操作覆盖:
	main.c
请在切换分支前提交您的修改或者保存进度。
终止中
stu@stu-PC:~/git_demo$ git stach
git:'stach' 不是一个 git 命令。参见 'git --help'。

您指的是这个么?
	stash
stu@stu-PC:~/git_demo$ git stash
保存工作目录和索引状态 WIP on dev: 3a16572 use add
HEAD 现在位于 3a16572 use add
stu@stu-PC:~/git_demo$ git checkout master
切换到分支 'master'
stu@stu-PC:~/git_demo$ git branch
  dev
* master
stu@stu-PC:~/git_demo$ 

git stash list 现场列表
stu@stu-PC:~/git_demo$ git stash list
// 名称         分支       iD     注释
stash@{0}: WIP on dev: 3a16572 use add
stu@stu-PC:~/git_demo$ 
git stash pop 恢复最近的一次现场

git stash pop “[现场名]” 恢复现场

stu@stu-PC:~/git_demo$ git stash list
stash@{0}: WIP on dev: 3a16572 use add
stu@stu-PC:~/git_demo$ git checkout dev
切换到分支 'dev'
stu@stu-PC:~/git_demo$ git stash pop
位于分支 dev
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	修改:     main.c

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
丢弃了 refs/stash@{0} (e66af48995d331833bdf5d61ba0bd0facb26f54c)
stu@stu-PC:~/git_demo$ cat main.c
#include <stdio.h>
#include <stdlib.h>

int add(int x,int y)
{
	return x+y;
}
int min(int x,int y)
{
	return x<y?x:y;
}
int main()
{
	int r1= add(2,3);
	printf("%d\n",r1);
	printf("hello world\n");
	exit(0);
}
stu@stu-PC:~/git_demo$ 
远程仓库操作

​ 我们需要gitee 或者github上注册一个账户。

ssh-keygen -t rsa -C “[邮箱]” 生成密钥
stu@stu-PC:~/git_demo$ ssh-keygen -t rsa -C "z@163.com"
Generating public/private rsa key pair. Enter file in which to save the key (/home/stu/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/stu/.ssh/id_rsa Your public key has been saved in /home/stu/.ssh/id_rsa.pub The key fingerprint is: SHA256:QFRjZabbzQadfEYfvGIanZbRkWdYSLpv70iSgbRMFr4 z@163.com
The key's randomart image is: 
+---[RSA 3072]----+
|  .o.+.= .=*+|
| . . * + =o=+|
|  . . * * *.+|
|   . B O @ . |
|     S E @ . | 
|         o + |
|         o + |
|         + o | 
|          ..o|
+----[SHA256]-----+

stu@stu-PC:~/git_demo$ cd ~
stu@stu-PC:~$ cd .ssh
stu@stu-PC:~/.ssh$ ls
//私钥	公钥		
id_rsa  id_rsa.pub  known_hosts
stu@stu-PC:~/.ssh$ cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDO++2UCA6kiL8wes7VC6J0WnblDG8JzOKcue0os14CfOtVl98iwaKXw/BY74bLmZh31XWY6WO2PFG6F6DphT2AeOPnO77q1s/1wtyIlDuyvl5d/fiRl5T/CgWQxBk2JVUyUnDZHU3cxfdXMqifYKpj4qB8+SDa97df2gyzhH7f+2PQLOofGRxtZh+UR1nmRaL/ZEBFbd71po9jujvlwT2gakIs2v4pgKXEBJkrUpP4Gi2O7J5SiN+kUOb4/SEbOoFH4wKJNVv3DoF7reuANvweT0P4ezecZeVgFUkQjJmsqhe6lpPx1Os/qRZg6enRy/QWdrJVjAVk2v5EOC7VsFlp z1445034376@163.com
stu@stu-PC:~/.ssh$ 

这里的公钥和私钥就是在gitee或者给github上添加,这样才可以和远程仓库建立连接

image-20210627145801278

image-20210627145731465

测试与github或者gitee(码云)有没有连通:

​ gitee和github 一样,在国内gitee要比github快,而且gitee私有仓库时免费的。

​ 测试github 的命令 :ssh -T git@github.com

stu@stu-PC:~/.ssh$ ssh -T git@github.com
Warning: Permanently added the RSA host key for IP address '52.74.223.119' to the list of known hosts.
Hi bo_peter! You've successfully authenticated, but GitHub does not provide shell access.

​ 测试github 的命令 :ssh -T git@gitee.com

stu@stu-PC:~/.ssh$ ssh -T git@gitee.com
Hi bo_peter! You've successfully authenticated, but GITEE.COM does not provide shell access.
克隆项目:git clone [项目地址]

​ 这里以gitee作为示范:

​ 随便找一个项目,作为示范

注意:一定要是ssh地址哦!

image-20210627144311830

ng objects: 100% (15/15), done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 15 (delta 4), reused 0 (delta 0), pack-reused 0
接收对象中: 100% (15/15), 完成.
处理 delta 中: 100% (4/4), 完成.
stu@stu-PC:~/Desktop/demo$ ls
emo.c  README.md
stu@stu-PC:~/Desktop/demo$ ls -a
.  ..  demo.c  .git  .gitignore  README.md
stu@stu-PC:~/Desktop/demo$ 
拉取远程服务器上的分支更新到本地 :git pull origin 分支名
提交分支到远程仓库:git push origin 分支名
提交分支到远程仓库,并跟踪分支 :git push -u origin 分支名

一般情况在push 之前,还是需要重新拉取一下,并不是只有一个小伙伴在更新代码,拉取下来在本地解决冲突,之后再push到远程服务器

别忘了,关注、点赞、收藏 !
  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Yi_Xiao

来瓶可乐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值