0%

这话没用。

有人发明了神学来证明自己血统的神圣,那些神圣的家族如今在哪里?他们的王国与权柄呢?那些虔诚的追随者呢?

人是根本的目的,将目的偏移了人的那一刻,手段就注定了失败。多少人尝试用立法来保护自己的财产,他们的财产如今在哪里?多少人想用理论建设来论证自身的合法性,那些理论又拯救了谁?

他们都是有罪的吗?肯定不是。翻几页史书就知道,有高尚的贵族,无私的资本家,博爱的奴隶主。有些原始积累,真的相当干净,当他们被送上断头台时,谁不感慨唏嘘。

但是历史就是这样,人的意志也是这样,就像一头视力鸟差的熊瞎子。一巴掌拍下来,只拍到一个群体,锋利的爪子没有闲情去分辨无辜的个人。

所以,当你明显感到不公平在加剧时,你当然可以为不公平去辩解。因为很多不公平,还真是合法合理的,我祖上,我祖上的祖上,有鼻有眼,有理有据。

但真是有理有据吗?在你祖上奋力奔跑时,起跑线是齐的吗?所有人都听到了发令枪枪响吗?大家的负重都一样吗?

你说不清现在积累的,多少是个人奋斗,多少是历史进程。那你就无法阻挡愤怒的盲目:你说不清,对方也没必要分清。

面对社会意志这个近乎混沌的系统,讲道理也要讲平衡,讲正义也要讲寡均。你煞费苦心抛出一条完美精细的证据链,可知刘项从来不读书?

首先,我们编程都是用的高级语言(写汇编和机器语言的大牛们除外),计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级语言所编写的程序。

说到翻译,其实翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。

用编译型语言写的程序执行之前,需要一个专门的编译过程,通过编译系统(不仅仅只是通过编译器,编译器只是编译系统的一部分)把高级语言翻译成机器语言(具体翻译过程可以参看下图),把源高级程序编译成为机器语言文件,比如windows下的exe文件。以后就可以直接运行而不需要编译了,因为编译只做了一次,运行时不需要编译,所以编译型语言的程序执行效率高,但也不能一概而论,部分解释型语言的解释器通过在运行时动态优化代码,甚至能够使解释型语言的性能超过编译型语言。

解释则不同,解释型语言编写的程序不需要编译。解释型语言在运行的时候才翻译,比如VB语言,在执行的时候,专门有一个解释器能够将VB语言翻译成机器语言,每个语句都是执行的时候才翻译。这样解释型语言每执行一次就要翻译一次,效率比较低。

编译型与解释型,两者各有利弊。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。

但随着硬件的升级和设计思想的变革,编译型和解释型语言越来越笼统,主要体现在一些新兴的高级语言上,而解释型语言的自身特点也使得编译器厂商愿意花费更多成本来优化解释器,解释型语言性能超过编译型语言也是必然的。

说到这里,我们有必要说一下java与C#。解释型语言和编译型语言的区别

JAVA语言是一种编译型-解释型语言,同时具备编译特性和解释特性(其实,确切的说java就是解释型语言,其所谓的编译过程只是将.java文件编译成平台无关的字节码.class文件,并不是向C一样编译成可执行的机器语言。作为编译型语言,JAVA程序要被统一编译成字节码文件——文件后缀是class。此种文件在java中又称为类文件。java类文件不能再计算机上直接执行,它需要被java虚拟机编译成本地的机器码后才能执行,而java虚拟机的编译过程则是解释性的。java字节码文件首先被加载到计算机内存中,然后读出一条指令,翻译一条指令,执行一条指令,该过程被称为java语言的解释执行,是由java虚拟机完成的。而在现实中,java开发工具JDK提供了两个很重要的命令来完成上面的编译和解释(翻译)过程。两个命令分别是java.exe和javac.exe,前者加载java类文件,并逐步对字节码文件进行编译,而另一个命令则对应了java语言的解释(javac.exe)过程。在次序上,java语言是要先进行编译的过程,接着解释执行。

C#语言是编译型语言,但其“编译”过程比较特殊,具体说明如下:

C#程序在第一次运行的时候,会依赖其.NET Frameworker平台,编译成IL中间码),然后由JIT compiler翻译成本地的机器码执行。从第二次在运行相同的程序,则不需要再执行以上编译和翻译过程,而是直接运行第一次翻译成的机器码。所以对于C#来说,通常第一次运行时间会很长,但从第二次开始,程序的执行时间会快很多。

那么,C#为什么要进行两次“编译”呢?其实,微软想通过动态编译(由JIT compiler工具实现)来实现其程序运行的最优化。如果代码在运行前进行动态编译运行,那么JIT compiler可以很智能的根据你本地机器的硬件条件来进行优化,比如使用更好的register,机器指令等等,而不是像原来那样,build一份程序针对所有硬件的机器跑,没有充分利用各个机器的条件。

另外,还有我们经常用到的脚本语言,比如JavaScript、Shell等语言都是脚本语言,本质上来说,脚本语言就是解释型语言。

美国不是美国人民的美国,而是全世界权贵的美国,本质上是一个被寄生的躯壳,而寄生虫对母体,是不会有什么感情的。

某些人在教育我等无知群众的时候总是喜欢强调 “有钱人 / 有权人 / 聪明人都往美国跑”,那么问题来了,他们往美国跑是因为他们热爱美国人民吗?

我以为 16 年川普登基那一波大家已经知道美国人民是个什么水平, 没想到现在还要给大家复述一下

美国人民的平均水平是红白黑墨,村里红脖子 + 城里白左 + 城里黑哥 + 城里墨西哥,这四大天王才是美国人民的主流,川皇前后矛盾,红脖子不觉得有问题,希奶奶黑料一堆,后面三不觉得有问题。

至于什么华尔街精英,硅谷工程师,那都是少数,并且,这些都是可以从国外补充的。对于寄生在美国的全世界权贵而言,红白黑墨的价值不过是就近提供服务和产品,自己再把从全世界掠夺的资源分点残羹剩饭给他们,当然,红白黑墨身上也不是不能榨取东西,比如高昂的学费和医疗,毕竟要算经济账的啊,我要是养这些红白黑墨还不能回本,我养你们干什么?产业转移它不香吗?

比如为啥美国很多公立学校一塌糊涂,连算数都学不好,就放任学生混日子?废话,培养工程师成本多高啊,而且产出低,一百个学生里面就出一两个,何必花这钱,我从东亚和东欧挖人它不香吗?

但是美国并不是第一天这样的,二战前后的美国工人是全世界最优秀的工人,因为当时没法产业转移,只能靠美国自己;冷战结束前,美国自己培养的工程师也是全世界最优秀的工程师,因为当时没地方挖工程师,只能靠美国自己。

你不能给寄生虫更多的选择,选择一多,它对母体的感情就淡薄了,可以更加敲骨吸髓的压榨母体,这不,红白黑墨就起来造反了,但是即使造反选出了川皇,川皇也不过是个金发崇祯罢了,面对新冠闯王也是束手无策。

如果川皇英明神武,向金统帅学习,起手一个三十天全国隔离,那肯定是一波搞定新冠,但是以红白黑墨的智商能理解这其中的深意吗?他们只知道,老子丢了工作,憋了三十天,最后也没啥大事,这样还能给川皇投票吗?

如果川皇亡羊补牢,向 F4 学习,隔离重点疫区,力求挽救人民群众的生命,等等,你说那些得病的红白黑墨值几个钱?就算死个几十万,开放移民不就马上能填补吗?移民还更便宜,更年轻。美国的医疗系统是用来给红白黑墨救命的吗?这是用来赚钱的!赔本生意不做!

川皇甚至惨到都不能向英国学习,毕竟人家虽然说群体免疫,但是也好歹上至皇室,下至 P 民,都感染了新冠,君主制下,君主对臣子毕竟负有责任。但是在寄生制下,权贵对 P 民有什么责任?到现在美国也没几个位高权重的人与民同病,倒是有参议员知情不报忙着卖股票——有没有品到寄生的内味了?

咱们再回顾下种姓制

第一等级—婆罗门—僧侣贵族,解释宗教经典和祭神。

第二等级—刹帝利—军事贵族和行政贵族,征收各种赋税;

第三等级—吠舍—以布施和纳税的形式来供养前两个等级,主商业;

第四等级—首陀罗—伺候用餐、做饭的高级佣人和工匠组成,是人口最多的种姓。

“第五种姓”—“不可接触者”,“贱民” 或 “达利特”,他们从事最低贱的职业,不算人民。

美帝可以说完美复刻,怪不得印度人喜欢往美国跑,原来是找到了家的感觉。

①全球权贵,没事给大伙灌灌鸡汤,什么人权啊,环保啊,邪恶轴心啊

②大小兵 / 警头,联邦和州的大小官员,对内外进行掠夺和镇压

③工程师为代表的高级劳动者

④红白黑绿等低级劳动者

⑤城市贫民与黑工

疫情在④和⑤里面爆发不能叫 “美国疫情爆发”,只能叫 “疫情在美国爆发”。

从1922年建立到1991年苏联解体共计69年,先后产生了七位最高领导人。

列宁:俄罗斯人,父亲公务员,母亲家庭主妇。

斯大林:格鲁吉亚人,父亲修鞋匠,母亲出身农奴家庭。

赫鲁晓夫:乌克兰的俄罗斯人,父母都是贫苦农民,玉米哥最初是钳工出道。

勃列日涅夫:乌克兰人,父母都是冶金工人,勋章哥也是工人出道。

安德罗波夫:出身铁路工人家庭,年轻时先后干过工人、电报员、电影放映员、水手等工作。

契尔年科:西伯利亚人,父亲是矿场工人,母亲农民,少年时期以雇工身份出道。

戈尔巴乔夫:农民家庭出身,车臣边境线上的俄罗斯人,父亲机修工,母亲务农活,地图哥是靠修理手扶拖拉机出道。

这七位当中,除了列宁出身中产以上,其余全部来自最底层。在苏联之前,这个世界上可曾有过历届最高领导人全部来自底层劳苦大众的政权吗?师爷您给翻译翻译,什么才是真正的皿煮。

另外,苏联的一把手有俄罗斯人,有乌克兰人,有格鲁吉亚人,如果不解体可能还会有哈萨克人。军队的元帅可以是波兰人(罗科索夫斯基),也可以是亚美尼亚人(巴格拉米杨)。

凡事都有两面性,既然问的是苏联带给人类文明进步的意义,那勇士变恶龙的故事就不在本文讨论之列了。把视野放宽到人类文明进步的高度来看,苏联的出现,史无前例地提高了全世界底层人民的社会地位,让屁民们也有实力发出资本不敢忽视的声音。

陈胜吴广在秦末战争中只是一朵不大不小的浪花,却能深刻影响中国两千年,后世历代帝王莫不深以为惮。苏联就是这样一个存在,是对当时肆无忌惮的资本精英和压迫制度喊出“宁有种乎”并付诸行动的先驱。虽然最后失败了,但是它的初心和精神,鼓励着一代代底层劳动人民为争取自己的利益而团结奋斗;提醒着贪婪的资本家们注意吃相,达摩克利斯剑从未远去。

  1. Seek wealth, not money or status. Wealth is having assets that earn while you sleep. Money is how we transfer time and wealth. Status is your place in the social hierarchy.

去寻求财富,而非金钱或地位。财富就是你拥有资产,而资产在你睡觉的时候都还在为你赚钱;金钱是我们转换时间和财富的工具;身份是你在社会等级体系里所处的位置。

  1. Understand that ethical wealth creation is possible. If you secretly despise wealth, it will elude you.

要明白一件事:一个人完全可以不靠坑蒙拐骗站着赚取财富。如果你在暗中鄙视财富,那么财富也会躲着你。

  1. Ignore people playing status games. They gain status by attacking people playing wealth creation games.

别去理会那些热衷于玩身份游戏的人,他们通过攻击那些创造财富的人以获得自己的身份。

  1. You’re not going to get rich renting out your time. You must own equity — a piece of a business — to gain your financial freedom.

你不会通过出租自己的时间而变得富有。你必须拥有产权,也就是生意的一部分,以此才能赢得个人财务自由。

  1. You will get rich by giving society what it wants but does not yet know how to get. At scale.

提供社会大众想要但是他们还不知道如何获取的东西,你就会因此而致富。但有一点:你必须规模化地供应社会。

  1. Pick an industry where you can play long term games with long term people.

选择一个你可以长期从事的产业,寻找一批可以一起长期共事的人。

  1. The Internet has massively broadened the possible space of careers. Most people haven’t figured this out yet.

互联网极大拓展了一个人职业生涯的可能性。绝大多数人对此毫无认知。

  1. Play iterated games. All the returns in life, whether in wealth, relationships, or knowledge, come from compound interest.

玩就玩复利游戏。无论是财富,人际关系或者是知识,所有你人生里获得的回报,都来自复利。

  1. Pick business partners with high intelligence, energy, and, above all, integrity.

在选择商业合作伙伴的时候,选择那些高智商、精力旺盛的家伙,但在这一切之上,他应该是个正直诚实的人。

  1. Don’t partner with cynics and pessimists. Their beliefs are self-fulfilling.

不要和愤世嫉俗者和悲观主义者合作,因为他们会任由坏事发生,以此证明他们的负面看法是正确的。

  1. Learn to sell. Learn to build. If you can do both, you will be unstoppable.

学会如何销售,学会如何创建。如果你同时能做到这两件事,你的成功将无可阻挡。

  1. Arm yourself with specific knowledge, accountability, and leverage.

用独到知识,责任感和杠杆武装自己。

  1. Specific knowledge is knowledge that you cannot be trained for. If society can train you, it can train someone else, and replace you.

独到知识是那种不可以通过培训而获得的知识。这是因为,如果这种知识可以经由培训而得,那么其他人同样也可以,并且以此取代你。

  1. Specific knowledge is found by pursuing your genuine curiosity and passion rather than whatever is hot right now.

在真正的好奇心和热情驱使你前进的路上,你更有可能获得独到知识,而不是在追逐潮流热点的闻风起舞脚步里。

  1. Building specific knowledge will feel like play to you but will look like work to others.

创建独到知识的过程对于你就像是在玩,而对于别人则像是工作。

  1. When specific knowledge is taught, it’s through apprenticeships, not schools.

不能通过学校教育教会一个人独到知识,它只能通过学徒制口传身教。

  1. Specific knowledge is often highly technical or creative. It cannot be outsourced or automated.

独到知识通常极富技术性和创造性,因此它不能被外包或自动实现。

  1. Embrace accountability, and take business risks under your own name. Society will reward you with responsibility, equity, and leverage.

拥抱责任感,押上自己的声誉以承担商业风险。社会也会以责任,产权和杠杆作为回报。

  1. The most accountable people have singular, public, and risky brands: Oprah, Trump, Kanye, Elon.

最具责任感的人都具有独一无二的、世人皆知的、敢于冒险的个性特征,如奥普拉、川普、坎耶、埃隆。

  1. “Give me a lever long enough, and a place to stand, and I will move the earth.” — Archimedes

只要给我一根足够长的杠杆,一处可以立足的地方,我就能撬起地球。——阿基米德

  1. Fortunes require leverage. Business leverage comes from capital, people, and products with no marginal cost of replication (code and media).

财富增长需要使用杠杆。商业杠杆有三个来源:1、资本;2、人力;3、复制起来边际成本为零的产品(如:代码和媒体)。

  1. Capital means money. To raise money, apply your specific knowledge, with accountability, and show resulting good judgment.

资本的意思就是钱。想要融资,那就运用你的独到知识,配合你责任感,展示出你良好的判断力。

  1. Labor means people working for you. It’s the oldest and most fought-over form of leverage. Labor leverage will impress your parents, but don’t waste your life chasing it.

人力指的就是为你干活的人,它是最古老也是争夺最激烈的杠杆。人力杠杆会让你父母因为你手下有许多人为你工作而感到骄傲,但你不要浪费生命去追求这一点。

  1. Capital and labor are permissioned leverage. Everyone is chasing capital, but someone has to give it to you. Everyone is trying to lead, but someone has to follow you.

资本和劳动力是需要征得许可才能使用的杠杆。每个人都在追逐资本,但总得有个什么人给你才行;每个人都想要领导其它人,但总得有什么人愿意跟着你才行。

  1. Code and media are permissionless leverage. They’re the leverage behind the newly rich. You can create software and media that works for you while you sleep.

代码和媒体是无需要许可即可使用的杠杆。它们是新贵人群背后的杠杆,你可以通过自己创建的软件和媒体,在睡觉时仍然为你干活。

  1. An army of robots is freely available — it’s just packed in data centers for heat and space efficiency. Use it.

一支机器人军团已经集结待命,只是为了节约空间和热效能,它们被打包放进数据中心。去用吧。

  1. If you can’t code, write books and blogs, record videos and podcasts.

如果你不会编程,那你还可以写书和博客,或者做视频或者音频节目。

  1. Leverage is a force multiplier for your judgement.

杠杆能够成倍地放大你的判断力(所产生的效能)。

  1. Judgement requires experience, but can be built faster by learning foundational skills.

判断力需要经验,但它可以通过学习基本技能的方法更快速地建立起来。

  1. There is no skill called “business.” Avoid business magazines and business classes.

并不存在一种叫做“商业”的能力。尽量避开商业杂志和商业课程。

  1. Study microeconomics, game theory, psychology, persuasion, ethics, mathematics, and computers.

去学习微观经济学、博弈论、心理学、说服术、伦理学、数学和计算机科学。

  1. Reading is faster than listening. Doing is faster than watching.

读比听快,做比看快。

  1. You should be too busy to “do coffee,” while still keeping an uncluttered calendar.

你应该忙得没有社交的时间才对,与此同时你应该始终保证日程安排井井有条。

  1. Set and enforce an aspirational personal hourly rate. If fixing a problem will save less than your hourly rate, ignore it. If outsourcing a task will cost less than your hourly rate, outsource it.

你应该为自己设定一个有抱负的个人时薪数,并且坚持执行。如果解决一个问题所能节省下来的成本低于你的个人时薪,那就忽略这个问题好了;如果一项任务的外包成本低于你的个人时薪,就把它外包出去。

  1. Work as hard as you can. Even though who you work with and what you work on are more important than how hard you work.

尽管你跟谁一起工作、做什么工作,要远比你的努力程度更加重要。但还是要倾尽全力去工作。

  1. Become the best in the world at what you do. Keep redefining what you do until this is true.

你所做的事情,要努力做到世界最好。不断重新定义你在做什么,直到真的做到世界最好。

  1. There are no get rich quick schemes. That’s just someone else getting rich off you.

这个世界上并没有快速赚钱致富的方法,如果你想要找寻这种方法,那它只会让别人从你身上赚钱致富。

  1. Apply specific knowledge, with leverage, and eventually you will get what you deserve.

运用你的独到知识,配合上杠杆,最终你会得到你应该得到的东西。

  1. When you’re finally wealthy, you’ll realize that it wasn’t what you were seeking in the first place. But that’s for another day.

终有一天当你变得富有,你会发现那一切并不是你最开始想要的东西。但是那就是另外一回事了。

公司业务类话术:
开会不能叫开会,叫对一下。和技术人员讨论问题要说成和技术盘一下。

出了线上事故要追责,当事人不能称检讨,要称之为复盘事故

成本和产出在ppt里面一定要写成 roi

kpi 过时了,要用okr,反正两者有啥区别我至今混淆不清

特么给社区安装摄像头找狗的活叫深耕生活细分领域

bug太多,修了好几天不能说是修bug,周报里面要说成是持续优化

叫一个技术人员过去给业务打杂,叫做业务支持,叫几个技术人员过去给业务打杂,叫做技术赋能,叫一群技术人员过去给业务打杂,叫做中台赋能,把公司的所有技术骨干都叫过去过去给业务打杂,叫做中台转型战略

做了一个公司少数几个部门在用的服务,叫做技术沉淀,做了一个很多部门都在用的服务,叫做中台技术沉淀,做了一个很多公司都在用的服务叫做对外技术输出,做了一个全球码农都在用的叫。。。轮子,这个没变

公司里面有头有脸的技术员工,应该叫崇尚 impact,英文不能写成中文

做业务推进的太凶残,把对方业务团队要做的也给做了,叫做不设边界

叫做 xx 研究院的通常是虚拟组织,并没有确切的部门实体

公司做了很多有用无用产品,放到一起叫做产品矩阵,产品之间的关系,叫做打通产品生态链

把a产品的流量打到b产品叫做导流,导流不起作用叫做产品生态隔离

看人家做了产品自己也跟风过去做不能叫跟风,叫做搭建公司防御性产品。跟风足够快,叫做进攻性产品

技术类话术:
给广告配个图叫样式优选,配图的来源不能说成图像数据集,要称之为物料库,特征不能叫特征,叫语料

做召回不小心召回过多,如果有效叫扩触发,无效叫做过触发

item 冷启过程叫做爬坡,直接飞到你的模型,你模型 oov了,不能说成是查表查不到,要叫做新触达

强化学习explore过程,我第一次知道产品层面叫做价值上探,你说强化学习探索就是随机投,估计会被产品骂死

怕出事故写了一个 try except 类型的代码,叫做兜底策略

内卷的解决,无外乎两个大方向:1,扩大资源总量;2,减少竞争人数

这是句废话。

然后,扩大资源总量,又有三个典型套路:1.1,提高附加值和规模;1.2,围绕资源不均衡的再分配;1.3,丰富对 “资源” 的定义,丰富路径的多元化。

而减少竞争人数,又有三个典型套路:2.1,通过丰富路径的多元化来降低每一条赛道的人数;2.2,让更多的人彻底放弃对参与竞争的兴趣;2.3,杀人。

具体比喻或比方来说就是,

1.1:入关(口号背后是四个自信、中国制造 2025、一带一路、产业升级、亚投行、人类文明共同体、人民币全球化…… 是大连,是长兴岛)

1.2:杀土豪分田地

1.3,搬家去鹤岗,去蓝翔,去新东方,去打篮球 + 说唱

2.1,搬家去鹤岗,去蓝翔,去新东方,去打篮球 + 说唱

2.2,租鸡青一

2.3,重复封建时代的历史循环

围绕中国的现状来说,简单分析,点到为止:

1.1:成功了无上限,但进程有困难,也可能不成功,且有可能有人会当炮灰

1.2:上限确定,既在绝对平均,且 “均贫富” 不会导致 “均贫” 的错误假设下,人均最多每年 2-3 万元人民币的可支配收入(1 万美元 乘 0.5 乘 7),依然等同于碎钱

2.3:21 世纪了,有点儿人性好不好

于是,作为 “普通人”,最直接且立竿见影的,应对内卷的方法是,

1.3 既 2.1,学个什么营生的手艺,别太累,搬家去 “鹤岗”。年轻时多玩儿多搞黄色,差不多了就找个匹配的伴儿,多生孩子,好好过小日子。

2.2,非不喜欢 “鹤岗”,非要在一线城市呆着,那就降低欲望,放弃竞争,甚至放弃婚配和繁衍,安心赚 100 花 100,吃饱了就搞一搞,就这么过下去。

1.2,如果你年均可支配收入低于 3 万元人民币,那么可以多多追求这个,同时期待我国的 “均贫富” 事业,能神奇般地不导致“均贫”,于是竟然能维持在人均 3 万的水平上而不骤降。

1.1,肉身参与、或精神支持、或起码不反对入关事业。

新建

创建一个新的 git 版本库。这个版本库的配置、存储等信息会被保存到.git 文件夹中

1
2
3
4
5
6
7
8
9
10
11
12
13
# 初始化当前项目
$ git init

# 新建一个目录,将其初始化为Git代码库
$ git init [project-name]

# 在指定目录创建一个空的 Git 仓库。运行这个命令会创建一个名为 directory,只包含 .git 子目录的空目录。

$ git init --bare <directory>

# 下载一个项目和它的整个代码历史
# 这个命令就是将一个版本库拷贝到另一个目录中,同时也将分支都拷贝到新的版本库中。这样就可以在新的版本库中提交到远程分支
$ git clone [url]

配置

更改设置。可以是版本库的设置,也可以是系统的或全局的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 显示当前的Git配置
$ git config --list

# 编辑Git配置文件
$ git config -e [--global]

# 输出、设置基本的全局变量
$ git config --global user.email
$ git config --global user.name

$ git config --global user.email "MyEmail@gmail.com"
$ git config --global user.name "My Name"

# 定义当前用户所有提交使用的作者邮箱。
$ git config --global alias.<alias-name> <git-command>

# 为Git命令创建一个快捷方式(别名)。
$ git config --system core.editor <editor>

帮助

git 内置了对命令非常详细的解释,可以供我们快速查阅

1
2
3
4
5
6
7
8
9
10
11
# 查找可用命令
$ git help

# 查找所有可用命令
$ git help -a

# 在文档当中查找特定的命令
# git help <命令>
$ git help add
$ git help commit
$ git help init

状态

显示索引文件(也就是当前工作空间)和当前的头指针指向的提交的不同

1
2
3
4
5
# 显示分支,未跟踪文件,更改和其他不同
$ git status

# 查看其他的git status的用法
$ git help status

信息

获取某些文件,某些分支,某次提交等 git 信息

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# 显示commit历史,以及每次commit发生变更的文件
$ git log --stat

# 搜索提交历史,根据关键词
$ git log -S [keyword]

# 显示某个commit之后的所有变动,每个commit占据一行
$ git log [tag] HEAD --pretty=format:%s

# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
$ git log [tag] HEAD --grep feature

# 显示某个文件的版本历史,包括文件改名
$ git log --follow [file]
$ git whatchanged [file]

# 显示指定文件相关的每一次diff
$ git log -p [file]

# 显示过去5次提交
$ git log -5 --pretty --oneline

# 显示所有提交过的用户,按提交次数排序
$ git shortlog -sn

# 显示指定文件是什么人在什么时间修改过
$ git blame [file]

# 显示暂存区和工作区的差异
$ git diff

# 显示暂存区和上一个commit的差异
$ git diff --cached [file]

# 显示工作区与当前分支最新commit之间的差异
$ git diff HEAD

# 显示两次提交之间的差异
$ git diff [first-branch]...[second-branch]

# 显示今天你写了多少行代码
$ git diff --shortstat "@{0 day ago}"

# 比较暂存区和版本库差异
$ git diff --staged

# 比较暂存区和版本库差异
$ git diff --cached

# 仅仅比较统计信息
$ git diff --stat

# 显示某次提交的元数据和内容变化
$ git show [commit]

# 显示某次提交发生变化的文件
$ git show --name-only [commit]

# 显示某次提交时,某个文件的内容
$ git show [commit]:[filename]

# 显示当前分支的最近几次提交
$ git reflog

# 查看远程分支
$ git br -r

# 创建新的分支
$ git br <new_branch>

# 查看各个分支最后提交信息
$ git br -v

# 查看已经被合并到当前分支的分支
$ git br --merged

# 查看尚未被合并到当前分支的分支
$ git br --no-merged

添加

添加文件到当前工作空间中。如果你不使用 git add 将文件添加进去,那么这些文件也不会添加到之后的提交之中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 添加一个文件
$ git add test.js

# 添加一个子目录中的文件
$ git add /path/to/file/test.js

# 支持正则表达式
$ git add ./*.js

# 添加指定文件到暂存区
$ git add [file1] [file2] ...

# 添加指定目录到暂存区,包括子目录
$ git add [dir]

# 添加当前目录的所有文件到暂存区
$ git add .

# 添加每个变化前,都会要求确认
# 对于同一个文件的多处变化,可以实现分次提交
$ git add -p

删除

rm 和上面的 add 命令相反,从工作空间中去掉某个文件

1
2
3
4
5
6
7
8
9
10
11
# 移除 HelloWorld.js
$ git rm HelloWorld.js

# 移除子目录中的文件
$ git rm /pather/to/the/file/HelloWorld.js

# 删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...

# 停止追踪指定文件,但该文件会保留在工作区
$ git rm --cached [file]

分支

管理分支,可以通过下列命令对分支进行增删改查切换等

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# 查看所有的分支和远程分支
$ git branch -a

# 创建一个新的分支
$ git branch [branch-name]

# 重命名分支
# git branch -m <旧名称> <新名称>
$ git branch -m [branch-name] [new-branch-name]

# 编辑分支的介绍
$ git branch [branch-name] --edit-description

# 列出所有本地分支
$ git branch

# 列出所有远程分支
$ git branch -r

# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]

# 新建一个分支,并切换到该分支
$ git checkout -b [branch]

# 新建一个分支,指向指定commit
$ git branch [branch] [commit]

# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]

# 切换到指定分支,并更新工作区
$ git checkout [branch-name]

# 切换到上一个分支
$ git checkout -

# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]

# 合并指定分支到当前分支
$ git merge [branch]

# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]

# 删除分支
$ git branch -d [branch-name]

# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

# 切换到某个分支
$ git co <branch>

# 创建新的分支,并且切换过去
$ git co -b <new_branch>

# 基于branch创建新的new_branch
$ git co -b <new_branch> <branch>

# 把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除
$ git co $id

# 把某次历史提交记录checkout出来,创建成一个分支
$ git co $id -b <new_branch>

# 删除某个分支
$ git br -d <branch>

# 强制删除某个分支 (未被合并的分支被删除的时候需要强制)
$ git br -D <branch>

检出

将当前工作空间更新到索引所标识的或者某一特定的工作空间

1
2
3
4
5
6
# 检出一个版本库,默认将更新到master分支
$ git checkout
# 检出到一个特定的分支
$ git checkout branchName
# 新建一个分支,并且切换过去,相当于"git branch <名字>; git checkout <名字>"
$ git checkout -b newBranch

远程同步

远程同步的远端分支

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
33
34
35
# 下载远程仓库的所有变动
$ git fetch [remote]

# 显示所有远程仓库
$ git remote -v

# 显示某个远程仓库的信息
$ git remote show [remote]

# 增加一个新的远程仓库,并命名
$ git remote add [shortname] [url]

# 查看远程服务器地址和仓库名称
$ git remote -v

# 添加远程仓库地址
$ git remote add origin git@ github:xxx/xxx.git

# 设置远程仓库地址(用于修改远程仓库地址)
$ git remote set-url origin git@ github.com:xxx/xxx.git

# 删除远程仓库
$ git remote rm <repository>

# 上传本地指定分支到远程仓库
# 把本地的分支更新到远端origin的master分支上
# git push <远端> <分支>
# git push 相当于 git push origin master
$ git push [remote] [branch]

# 强行推送当前分支到远程仓库,即使有冲突
$ git push [remote] --force

# 推送所有分支到远程仓库
$ git push [remote] --all

撤销

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
33
34
35
36
37
38
39
40
41
42
43
# 恢复暂存区的指定文件到工作区
$ git checkout [file]

# 恢复某个commit的指定文件到暂存区和工作区
$ git checkout [commit] [file]

# 恢复暂存区的所有文件到工作区
$ git checkout .

# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
$ git reset [file]

# 重置暂存区与工作区,与上一次commit保持一致
$ git reset --hard

# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
$ git reset [commit]

# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --hard [commit]

# 重置当前HEAD为指定commit,但保持暂存区和工作区不变
$ git reset --keep [commit]

# 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支
$ git revert [commit]

# 恢复最后一次提交的状态
$ git revert HEAD

# 暂时将未提交的变化移除,稍后再移入
$ git stash
$ git stash pop

# 列所有stash
$ git stash list

# 恢复暂存的内容
$ git stash apply

# 删除暂存区
$ git stash drop

commit

将当前索引的更改保存为一个新的提交,这个提交包括用户做出的更改与信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 提交暂存区到仓库区附带提交信息
$ git commit -m [message]

# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]

# 提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -a

# 提交时显示所有diff信息
$ git commit -v

# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]

# 重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...

diff

显示当前工作空间和提交的不同

1
2
3
4
5
6
7
8
# 显示工作目录和索引的不同
$ git diff

# 显示索引和最近一次提交的不同
$ git diff --cached

# 显示工作目录和最近一次提交的不同
$ git diff HEAD

grep

可以在版本库中快速查找

可选配置:

1
2
3
4
5
6
7
8
9
10
11
# 感谢Travis Jeffery提供的以下用法:
# 在搜索结果中显示行号
$ git config --global grep.lineNumber true

# 是搜索结果可读性更好
$ git config --global alias.g "grep --break --heading --line-number"
# 在所有的java中查找variableName
$ git grep 'variableName' -- '*.java'

# 搜索包含 "arrayListName" 和, "add" 或 "remove" 的所有行
$ git grep -e 'arrayListName' --and \( -e add -e remove \)

log

显示这个版本库的所有提交

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 显示所有提交
$ git log

# 显示某几条提交信息
$ git log -n 10

# 仅显示合并提交
$ git log --merges

# 查看该文件每次提交记录
$ git log <file>

# 查看每次详细修改内容的diff
$ git log -p <file>

# 查看最近两次详细修改内容的diff
$ git log -p -2

#查看提交统计信息
$ git log --stat

merge

合并就是将外部的提交合并到自己的分支中

1
2
3
4
5
6
# 将其他分支合并到当前分支
$ git merge branchName

# 在合并时创建一个新的合并后的提交
# 不要 Fast-Foward 合并,这样可以生成 merge 提交
$ git merge --no-ff branchName

mv

重命名或移动一个文件

1
2
3
4
5
6
7
8
9
10
11
12
# 重命名
$ git mv test.js test2.js

# 移动
$ git mv test.js ./new/path/test.js

# 改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]

# 强制重命名或移动
# 这个文件已经存在,将要覆盖掉
$ git mv -f myFile existingFile

tag

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
# 列出所有tag
$ git tag

# 新建一个tag在当前commit
$ git tag [tag]

# 新建一个tag在指定commit
$ git tag [tag] [commit]

# 删除本地tag
$ git tag -d [tag]

# 删除远程tag
$ git push origin :refs/tags/[tagName]

# 查看tag信息
$ git show [tag]

# 提交指定tag
$ git push [remote] [tag]

# 提交所有tag
$ git push [remote] --tags

# 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]

pull

从远端版本库合并到当前分支

1
2
3
4
5
6
# 从远端origin的master分支更新版本库
# git pull <远端> <分支>
$ git pull origin master

# 抓取远程仓库所有分支更新并合并到本地,不要快进合并
$ git pull --no-ff

ci

1
2
3
4
5
6
7
$ git ci <file>
$ git ci .
# 将git add, git rm和git ci等操作都合并在一起做
$ git ci -a
$ git ci -am "some comments"
# 修改最后一次提交记录
$ git ci --amend

rebase (谨慎使用)

将一个分支上所有的提交历史都应用到另一个分支上
不要在一个已经公开的远端分支上使用 rebase.

1
2
3
# 将experimentBranch应用到master上面
# git rebase <basebranch> <topicbranch>
$ git rebase master experimentBranch

reset (谨慎使用)

将当前的头指针复位到一个特定的状态。这样可以使你撤销 merge、pull、commits、add 等
这是个很强大的命令,但是在使用时一定要清楚其所产生的后果

1
2
3
4
5
6
7
8
9
10
11
12
13
# 使 staging 区域恢复到上次提交时的状态,不改变现在的工作目录
$ git reset

# 使 staging 区域恢复到上次提交时的状态,覆盖现在的工作目录
$ git reset --hard

# 将当前分支恢复到某次提交,不改变现在的工作目录
# 在工作目录中所有的改变仍然存在
$ git reset dha78as

# 将当前分支恢复到某次提交,覆盖现在的工作目录
# 并且删除所有未提交的改变和指定提交之后的所有提交
$ git reset --hard dha78as

其他

1
2
3
4
5
6
7
8
9
10
11
# 生成一个可供发布的压缩包
$ git archive

# 打补丁
$ git apply ../sync.patch

# 测试补丁能否成功
$ git apply --check ../sync.patch

# 查看Git的版本
$ git --version

  • 初级:在给出指导和具体实施细节后,能独立按时按量(数量和质量)完成工作。
  • 中级:不用指导和具体实施细节,能独立的按时按量(数量和质量)完成工作。
  • 高级:解难题(能解决业务或技术难题),传帮带(能指导培养初中级人员),标准化(能沉淀出可复制或可复用的方法论或工作方式,提高生产效率)
  • 总监:拿结果(拿到工作结果)、建团队(建立小而精战斗力强的团队)、提效率(提高执行效率)
  • 业务负责人或者VP:找方向(找到业务发展方向)、创效益(为公司创造实实在在的效益)、建文化(建设公司或部门的文化和价值观)

越来越像了

东林与宦党的朝堂党争

十户九空的大明劫

穷兵黩武的远征高句丽

关宁铁骑的佣兵自重

……..

太快了,太快了

并非我要去入那山海关,是那山海关拍我脸上了

什么是大选年啊(战术后仰)

你不入关,关就入你