使用git merge --squash,让commit变得优雅

使用squash把多個 Commit 合併成一個 Commit(git command || sourcetree) 有時候 Commit 的太過「瑣碎」,舉個例子來說: $ git log --oneline 27f6ed6 (HEAD -> master) add dog 2 2bab3e7 add dog 1 ca40fc9 add 2 cats 1de2076 add cat 2 cd82f29 add cat 1 382a2a5 add database settings bb0c9c2 init commit 在cd82f29跟1de2076這兩個 Commit 都只有各加一個檔案(分別是... 阅读详情
AI摘要

本文介绍了一种使用Git squash合并分支的方法,可以有效减少提交记录的数量,保持Git历史的整洁。通过简单的步骤演示如何从多个提交中创建单一的提交记录。

阅读本文需要3分钟

情景模拟

我们有三个分支,master,develop以及feature特性分支,假定我们开发时使用的是feature分支,我们来这里查看提交记录
这里写图片描述
当然,使用IDEA内置的 Version Control(默认快捷键 alt + 9) 也能看到
这里写图片描述

However,我只是想写一句话却commit了3次,就如同为了完成一个功能但是完善了很多地方(bug,逃。。),
如果你不想在合并分支时体现你多次commit记录的话,下面正是你想要找的东西

步骤

  1. 切换分支前,请输入 git status,确保你开发分支是都已commit的
    这里写图片描述

  2. 输入 git checkout branch_name,切换到你要合并的分支,并拉取最新的代码
    例:希望将分支 feature-1.0.0 的代码合并到 master(实际操作一般还有预发布分支,这里简化)
    这里写图片描述

  3. git三连:合并,提交,推送
    git merge --squash feature-1.0.0,注意:squash前面是两个短杠
    git commit -m '修复了xxx'
    git push origin master,注意:推到GitHub则需要登陆一下
    这里写图片描述

验收

输入 git log ,可以看到简洁的提交记录,log不再凌乱
这里写图片描述

git 如何将多个提交点合并为一个提交点 commit 是将分支branch2的提交点合并到本地当前分支。就表示在合并的时候将多个提交点合并为一个提交点。而在执行这条命令的时候,加一个选项。单词的意思:拥挤,使…… 阅读详情

相关推荐

告别命令行!用Goland的Squash Commits功能,3分钟搞定Git提交合并

本文详细介绍如何利用Goland的Squash Commits功能高效合并Git提交,告别繁琐的命令行操作。通过可视化界面3分钟完成提交整理,解决碎片化提交导致的代码审查困难、版本历史混乱等问题,提升团队协作效率。特别适合需要频繁提交又希望保持清晰历史的开发者。

weixin_28595749的博客 443

first-contributions 开源贡献实战:用交互式 Rebase(Squash Commits)将多个 Commit 合并为一个

> 本文基于 [first-contributions](https://link.gitcode.com/i/2c0d4a6ec16ff1dff622feff9e4d7848) 仓库的进阶 Git 文档《[Squashing Commits(土耳其语版)](https://link.gitcode.com/i/8cbca11025df1dd7478ab2e2dd81be16)》及其[英文原版](

gitblog_00882的博客 772

别再只会git merge了!用rebase和squash让你的提交历史像教科书一样清晰

本文深入探讨了Git中rebase和squash的高级用法,帮助开发者优化提交历史,提升代码可读性和协作效率。通过详细的步骤说明和实战案例,教你如何将杂乱的commit整理成清晰、线性的历史记录,特别适合团队协作和大型项目管理。

weixin_28745821的博客 336

Git创建子分支,合并分支并提交

1.先创建子分支,并包含最新当前分支下的修改数据 1 git checkout -b 新建分支名 2.将新分支内容全部提交 1 2 git add . git commit -m "提交" 3.在码云创建一个子分支 1 git push -u origin 新建分支名 4.切换到主分支 1 git checkout master

m0_37714008的博客 1824

告别commit混乱:5分钟学会用Git rebase合并历史记录

本文详细介绍了如何使用Git rebase命令,特别是交互式变基(git rebase -i),来合并零散的commit记录,从而创建清晰、原子性的提交历史。通过5分钟的核心操作教程,帮助开发者安全地整理本地提交,提升代码可读性和团队协作效率,告别commit混乱。

weixin_28839699的博客 386

【小白指南】如何将deepseek引入WPS\Word\Excel中去?

如何将deepseek引入WPS\Word\Excel中去?纯小白都能看的懂,一步步操作就能行

2503_90498422的博客 1万+

Git工具之merge --squash

此时,如果能够把我们在同一分支的commit合并为一个commit,然后merge到目标分支,事情将会变得简单起来。使用Git工具管理代码时,通常是新建分支,实现代码,然后进行代码审核,合并并推送到远程分支。再或者由于某些原因,导致需要代码回滚,由于commit记录太复杂,无法准确回退到指定版本。但通常情况下,完成需求需要在本分支中多次提交。与此同时,其他人也可能在其他分支进行开发。此时,如果合并代码,不同分支不同的commit记录会犬牙交错在一起。

dont_curry的博客 2215

Sourcetree与Gitee的搭配使用

初次将gitee与sourcetree联合起来使用,还是遇到了不少问题,其中最让人烦恼的就是在我修改了一下用户名之后,便无法在Sourcetree直接推送到gitee,很是让人郁闷。本文处理Sourcetree与gitee搭配使用过程中的问题:Sourcetree身份验证失败,无法推送;Sourcetree推送时,无法显示要推送的分支;Sourcetree远端上面有感叹号。

年少时的棉花糖 4434

使用git merge --squash,让commit变得优雅不想在合并分支时体现你多次commit合并一条显示

情景模拟 我们有三个分支,master,develop以及feature特性分支,假定我们开发时使用的是feature分支,我们来这里查看提交记录 当然,使用IDEA内置的 Version Control(默认快捷键 alt + 9) 也能看到 However,我只是想写一句话却commit了3次,就如同为了完成一个功能但是完善了很多地方(bug,逃。。), 如果你不想在合并分支时体现你多次commit记录的话,下面正是你想要找的东西 步骤 切换分支前,请输入 git status,确保你开发分支是

万事俱备,就差一个程序员了 631

人工智能顶会投稿指南:CCF-A类会议ACL、ICML、NeurIPS、ICLR的投稿周期与影响力解析

本文详细解析了CCF-A类会议ACL、ICML、NeurIPS、ICLR的投稿周期与影响力,涵盖各会议的投稿时间线、评审特点及录用率。ACL注重自然语言处理,ICML强调机器学习理论,NeurIPS覆盖神经信息处理,ICLR聚焦表征学习。文章还提供了实战投稿策略,帮助研究者提升投稿成功率。

weixin_29211309的博客 3346

【STM32CubeIDE入门】(一)工程创建&工程配置

​写在前面:如果是刚接触stm32cubeide的同学推荐与这一篇文章共同阅读,能够更加快速认识上手stm32cubeide。 1、打开stm32cubeide,选择好工作目录进入主界面后,点击创建工程。

涛涛子的博客 1万+

Git合并大法:Squash Merge和Rebase Merge实战对比(附避坑指南)

本文深入对比了Git中的Squash Merge和Rebase Merge两种合并策略,通过实战操作流程和场景化选择指南,帮助开发者高效管理分支合并。文章详细解析了两种策略的核心区别、适用场景及避坑技巧,特别适合团队协作中需要优化提交历史的开发者。

spice的博客 598

机器人学习-matlab四足机器人控制仿真

《机器人学,机器视觉与控制》学习笔记 使用工具箱版本9.10 题目与解决思路: 【1】. 通过减少复位期间的抬腿高度来缩短复位的轨迹 Z轴向下,为了减小复位器件的抬腿高度,应当缩小△Z,故可以将示例程序中zu值调大。 【2】. 增加腿的步幅 腿的步幅可由改变x方向上腿前进和后退运动的极限来达到,令xf = 7; xb = -xf;即可。 ...

weixin_44609769的博客 5538

git 只commit不push 会有影响吗_如何保持Git历史整洁

很久没整理学习的内容了,今天正好一直在用一段命令,就想着拿出来写一篇博客。Q: 什么样的git历史算整洁的? A: 首先,这个问题就是一个很主观的问题。 有的人认为git历史整洁的话应该减少merge commit,整体看着是线性的(类似svn的提交历史),且没有多余的commit。 但是这种会丢失一些信息,比如不知道当前是从哪里派生出来的...

weixin_39980347的博客 1913

Windows密码忘了怎么办?一分钟看懂Windows密码底层机制:无需重装系统也能无痕找回登录密码

忘记Windows开机密码,不一定非得重装系统!本文手把手教你通过提取NTLM Hash值实现“无痕找回密码”,无需PE、无需清除密码,对系统零修改 🛡️ 搭配mimikatz与在线解密平台,小白也能快速上手,了解Windows密码底层机制 🔐

XiaoqiangClub的博客 126

OFDM调制解调系统信道估计和均衡算法的MATLAB仿真

然后,从接收到的信号中提取导频序列,并使用LS算法进行信道估计。OFDM(正交频分复用)是一种常用于高速数据传输的调制技术,它将高速数据流分割成多个低速子载波,通过在不同的子载波上传输数据,实现了频域上的正交性。因此,信道估计和均衡算法在OFDM系统中起着至关重要的作用,用于减小信道衰落引起的影响。通过运行上述代码,可以进行基于LS算法的OFDM调制解调系统信道估计和均衡的MATLAB仿真。本文将介绍一种基于LS(最小二乘)算法的OFDM调制解调系统信道估计和均衡算法,并提供相应的MATLAB仿真代码。

uote_e的博客 229

别再乱用Git Merge了!Rebase和Squash的高级玩法解析(含.gitconfig配置技巧)

本文深入解析了Git中Rebase和Squash的高级用法,旨在替代混乱的Merge操作以打造线性、清晰的提交历史。通过对比Merge的优缺点,详细介绍了交互式变基、压缩合并的实践技巧,并提供了高效的.gitconfig配置方案,帮助开发者提升团队协作效率与代码审查体验。

weixin_32306683的博客 659

redhawk:使用rh_setup.pl产生gsr模板

必须加的option工具会在rh_setup.pl给出提示,按照要求填写即可,另外工具会把所有填写的输入文件和信息放到rh_setup.init文件中,拷贝这个文件可在任何平级运行目录下,直接rh_setup.pl产生gsr以及run sta/dyn/em的脚本。rhsetup.pl -top top_cell_name -vdd_nets VDD 1.2 VDD2 1.2 -vss_nets VSS -frequency 100e6 (100m是默认值)更多学习内容请关注「拾陆楼」知识星球。

m0_61544122的博客 1055

Git squash 实战指南:用 rebase -i 构建可读、可追溯、可协作的提交历史

在分布式版本控制中,提交历史不仅是代码快照,更是团队协作的知识载体。Git squash 本质是通过整合零散开发过程,提升历史记录的可读性与可追溯性,从而降低认知负荷、增强协作效率。其核心原理基于 Git 对象模型——交互式变基(rebase -i)能精确操控提交链、保留作者意图与演进脉络,而 merge --squash 则丢失中间状态,损害调试与归因能力。该技术广泛应用于功能交付、PR 清理、CI/CD 流水线标准化等工程场景,是现代前端、后端及全栈团队保障主干质量的关键实践。

weixin_30938149的博客 371

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Git合并与变基:如何选择Merge与Rebase提升代码历史清晰度

在版本控制系统中,分支管理是团队协作的核心环节,它直接影响代码历史的可读性与维护效率。其基本原理是通过不同的策略整合代码变更,确保项目演进过程有序可控。从技术价值看,清晰的提交历史能显著提升代码审查、问题追溯和持续集成的效率。常见的应用场景包括功能开发、Bug修复以及多版本并行维护。本文聚焦于Git中Merge与Rebase这两种关键操作,深入解析它们如何塑造提交历史的结构。通过对比两者的核心差异,例如Merge保留完整分支脉络而Rebase创造线性历史,开发者可以更好地管理代码演进路径。合理运用这些策略,

466

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Git交互式变基实战:合并多个Commit提升代码历史可读性

版本控制系统是现代软件开发的基础设施,它通过记录代码变更历史来支持团队协作与项目管理。Git作为分布式版本控制系统的代表,其核心原理在于通过快照机制追踪文件状态变化,并利用分支模型实现并行开发。在工程实践中,保持提交历史的原子性与可读性具有重要技术价值,它能显著降低代码审查成本、简化问题回溯流程,并提升项目长期可维护性。特别是在团队协作场景中,开发人员经常需要将一系列相关的本地提交整合为逻辑完整的变更单元,这正是Git交互式变基(git rebase -i)的典型应用场景。通过squash和fixup等操作

weixin_33726313的博客 545

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Git核心操作解析:merge、rebase与cherry-pick实战指南

版本控制系统是软件开发中管理代码变更的基础工具,其中Git作为分布式版本控制的代表,通过工作区、暂存区和仓库的三层架构实现高效协作。理解pull与fetch的差异、merge与rebase的原理,是处理代码合并冲突的关键技术。在团队开发场景中,squash能优化提交历史,cherry-pick可精准移植特定修改,这些操作直接影响代码库的整洁度和可维护性。本文基于高频Git面试题,深入解析这些核心命令的底层逻辑,特别针对rebase的黄金使用法则和merge后的安全回退方案提供工程实践指导,帮助开发者掌握版本

weixin_30832405的博客 334

Git Rebase实战:如何优雅地合并本地多个Commit(附常见错误解决)

本文详细讲解如何使用Git Rebase优雅合并本地多个Commit,包括交互式变基操作流程、常见错误解决方案及团队协作最佳实践。通过git rebase -i命令,开发者可以整理杂乱的提交历史,创建清晰、逻辑连贯的项目记录,特别适合本地分支管理。

weixin_28835583的博客 91

Git交互式变基:合并Commit的完整指南与实战

在版本控制系统中,提交历史是项目演进的宝贵记录。通过合并多个细碎的提交,可以形成逻辑清晰、意义完整的提交单元,这对于代码审查、问题回溯和生成更新日志至关重要。其核心原理在于对本地提交历史进行重写与整理,而非直接修改已发布的代码。从技术价值看,这能显著提升代码库的可读性与可维护性,是工程实践中的重要环节。在团队协作开发场景下,尤其是在准备合并请求(Pull Request)或功能分支集成时,一个整洁的提交历史能极大提升协作效率。本文聚焦于使用交互式变基(Interactive Rebase)这一强大工具,深入

weixin_30268921的博客 409

Git 这样回退代码,才足够优雅

光给面试题不给答案不是我的风格。这里面的面试题也只是凤毛麟角,还有答案的话会极大的增加文章的篇幅,减少文章的可读性。

2401_84010326的博客 1094

MXNet 贡献者 Git 工作流完全指南:从 rebase 冲突解决、分支管理到 squash 合并与安全强制推送

Apache MXNet 是一个社区驱动的开源深度学习框架,其官网维护着一份面向贡献者的 Git 使用技巧文档(对应仓库中的 [docs/static_site/src/pages/community/git_howto.md](https://link.gitcode.com/i/d75cea2a36152f9bc8748e9b001a3fc2)),并配套了 [社区贡献指南](https://l

gitblog_00956的博客 379
上一篇: 构建SpringBoot项目
下一篇: 服务治理Spring Cloud Eureka
火车站卖橘子
博客等级 码龄10年 10粉丝 47原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

火车站卖橘子

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值