原副标题:GitHub四天超4K星:畅享Git的72个奇妙基本功
新智元所推荐
撰稿:曾晓淇
【新智元编者按】不可否认,Git是两个“分布式系统版管理软件”,单纯的认知版管理软件。责任撰稿如是说了与采用Git有关的72个基本功,variations内含两张超详尽的脑图。GitHub正式发布3天已经超过4000星,值得称赞珍藏!
我们在用Git写东西的时候都用过“回调”这个机能,但是回调根本无法回调一百米,倘若想寻回我四天以后的修正,光用“回调”是找不回去的。
而“版管理软件”能历史记录每天的修正,如果递交到版库房,你就能找出以后时时刻刻的状况(文档状况)。
下面的文档是列出了常见的Git指示和一些小基本功,能通过”网页内搜寻”的方式进行加速查阅:Ctrl/Command+f。
Q1566A必修课
如果以后未采用过Git,能自学Git阿宝讲义进阶
1、一定要先试验指示的效用后,再用作组织工作自然环境中,以免导致不能填补的不良后果!这样一来别拿着斧头来找我。
2、所有的指示都在gitversion2.7.4(AppleGit-66)下THF1。
3、标准化基本概念:
组织工作区:更动(校订文档和文档);甲类:输入指示:gitadd更动的配置文档,本次更动就放在了‘暂存区’;邻近地区库房(全称:邻近地区):输入指示:gitcommit本次修正的叙述,本次更动就放在了’邻近地区库房’,每一commit,我叫它为两个‘版’;远距库房(全称:远距):输入指示:gitpush远距库房,本次更动就放在了‘远距库房’(GitHub等);commit-id:输入指示:gitlog,最下面那行commitxxxxxx,前面的数组是commit-id。
目录
展示帮助信息回到远距库房的状况重设第两个commit展示组织工作区和甲类的不同展示甲类和最近版的不同展示甲类、组织工作区和最近版的不同加速切换分支上两个分支删除已经合并到master的分支展示邻近地区分支关联远距库房的情况关联远距分支列出所有远距分支列出邻近地区和远距分支创建并切换到邻近地区分支从远距分支中创建并切换到邻近地区分支删除邻近地区分支删除远距分支重命名邻近地区分支查看标签查看标签详尽信息邻近地区创建标签推送标签到远距库房删除邻近地区标签删除远距标签切回到某个标签放弃组织工作区的修正恢复删除的文档以新增两个commit的方式还原某两个commit的修正回到某个commit的状况,并删除前面的commit修正上两个commit的叙述查看commit历史显示邻近地区更新过HEAD的git指示历史记录修正作者名修正远距库房的url增加远距库房列出所有远距库房查看两个星期内的更动把A分支的某两个commit,放在B分支上给git指示起别名存储当前的修正,但不用递交commit保存当前状况,包括untracked的文档展示所有stashes回到某个stash的状况回到最后两个stash的状况,并删除这个stash删除所有的stash从stash中拿出某个文件的修正展示所有tracked的文档展示所有untracked的文档展示所有忽略的文档强制删除untracked的文档强制删除untracked的目录展示简化的commit历史查看某段代码是谁写的把某两个分支到导出成两个文档从包中导入分支执行rebase以后自动stash从远距库房根据ID,拉下某一状况,到邻近地区分支详尽展示一行中的修正清除.gitignore文档中历史记录的文档展示所有alias和configs展示忽略的文档commit历史中显示Branch1有的,但是Branch2没有commit在commitlog中显示GPG签名删除全局设置新建并切换到新分支上,同时这个分支没有任何commit展示任意分支某一文档的文档clone下来指定的单一分支忽略某个文档的更动忽略文档的权限变化以最后递交的顺序列出所有Git分支在commitlog中搜寻有关文档把甲类的指定file放在组织工作区中强制推送一图详解
基本功大全详解
展示帮助信息
githelp-g
Thecommandoutputasbelow:
ThecommonGitguidesare:attributesDefiningattributesperpathcliGitcommand-lineinterfaceandconventionscore-tutorialAGitcoretutorialfordeveloperscvs-migrationGitforCVSusersdiffcoreTweakingdiffoutputeverydayAusefulminimumsetofcommandsforEverydayGitglossaryAGitGlossaryhooksHooksusedbyGitignoreSpecifiesintentionallyuntrackedfilestoignoremodulesDefiningsubmodulepropertiesnamespacesGitnamespacesrepository-layoutGitRepositoryLayoutrevisionsSpecifyingrevisionsandrangesforGittutorialAtutorialintroductiontoGittutorial-2AtutorialintroductiontoGit:parttwoworkflowsAnoverviewofrecommendedworkflowswithGitgithelp-aandgithelp-glistavailablesubcommandsandsomeconceptguides.Seegithelporgithelptoreadaboutaspecificsubcommandorconcept.
回到远距库房的状况
抛弃邻近地区所有的修正,回到远距库房的状况。
gitfetch–all&&gitreset–hardorigin/master
重设第两个commit
也是把所有的更动都重新放回组织工作区,并清空所有的commit,这样就能重新递交第两个commit了。
gitupdate-ref-dHEAD
展示组织工作区和甲类的不同
输入组织工作区和甲类的different(不同)。
gitdiff
还能展示邻近地区库房中任意两个commit之间的文档变动:
gitdiff
展示甲类和最近版的不同
输入甲类和邻近地区最近的版(commit)的different(不同)。
gitdiff–cached
展示甲类、组织工作区和最近版的不同
输入组织工作区、甲类和邻近地区最近的版(commit)的different(不同)。
gitdiffHEAD
加速切换分支上两个分支
gitcheckout-
删除已经合并到master的分支
gitbranch–mergedmaster|grep-v^\*\|master|xargs-n1gitbranch-d
展示邻近地区分支关联远距库房的情况
gitbranch-vv
关联远距分支
关联之后,gitbranch-vv就能展示关联的远距分支名了,同时推送到远距库房直接:gitpush,不需要指定远距库房了。
gitbranch-uorigin/mybranch
或者在push时加上-u参数:
gitpushorigin/mybranch-u
列出所有远距分支
-r参数相当于:remote:
gitbranch-r
列出邻近地区和远距分支
-a参数相当于:all
gitbranch-a
创建并切换到邻近地区分支
gitcheckout-b
从远距分支中创建并切换到邻近地区分支
gitcheckout-borigin/
删除邻近地区分支
gitbranch-d
删除远距分支
gitpushorigin–delete
或者
gitpushorigin:
重命名邻近地区分支
gitbranch-m
查看标签
gittag
展示当前分支的最近的tag
gitdescribe–tags–abbrev=0
查看标签详尽信息
gittag-ln
邻近地区创建标签
gittag
默认tag是打在最近的一次commit上,如果需要指定commit打tag:
$gittag-a-m”v1.0正式发布(叙述)”
推送标签到远距库房
首先要保证邻近地区创建好了标签才能推送标签到远距库房:
gitpushorigin
一次性推送所有标签,同步到远距库房:
gitpushorigin–tags
删除邻近地区标签
gittag-d
删除远距标签
删除远距标签需要先删除邻近地区标签,再执行下面的指示:
gitpushorigin:refs/tags/
切回到某个标签
一般上线以后都会打tag,是为了防止上线后出现问题,方便加速回退到上一版。下面的指示是回到某一标签下的状况:
gitcheckout-bbranch_nametag_name
放弃组织工作区的修正
gitcheckout
放弃所有修正:
gitcheckout.
恢复删除的文档
gitrev-list-n1HEAD–#得到deleting_commitgitcheckout^–#回到删除文档deleting_commit以后的状况
以新增两个commit的方式还原某两个commit的修正
gitrevert
回到某个commit的状况,并删除前面的commit
和revert的区别:reset指示会抹去某个commitid之后的所有commit
gitreset#默认是-mixed参数。gitreset–mixedHEAD^#回退至上个版,它将重置HEAD到另外两个commit,并且重置甲类以便和HEAD相匹配,但是也到此为止。组织工作区不会被更改。gitreset–softHEAD~3#回退至三个版以后,只回退了commit的信息,甲类和组织工作区与回退以后保持一致。如果还要递交,直接commit即可gitreset–hard#彻底回退到指定commit-id的状况,甲类和组织工作区也会变为指定commit-id版的文档
修正上两个commit的叙述
gitcommit–amend
查看commit历史
gitlog
查看某段代码是谁写的
blame的意思为‘责怪’,你懂的。
gitblame
显示邻近地区更新过HEAD的git指示历史记录
每天更新了HEAD的git指示比如commint、amend、cherry-pick、reset、revert等都会被历史记录下来(不限分支),就像shell的history一样。这样你能reset到任何一次更新了HEAD的操作之后,而不仅仅是回到当前分支下的某个commit之后的状况。
gitreflog
修正作者名
gitcommit–amend–author=AuthorName
修正远距库房的url
gitremoteset-urlorigin
增加远距库房
gitremoteaddorigin
列出所有远距库房
gitremote
查看两个星期内的更动
gitwhatchanged–since=2weeksago
把A分支的某两个commit,放在B分支上
这个过程需要cherry-pick指示
gitcheckout&&gitcherry-pick
给git指示起别名
简化指示
gitconfig–globalalias.比如:gitstatus改成gitst,这样能简化指示gitconfig–globalalias.ststatus
存储当前的修正,但不用递交commit
详解能参考廖雪峰老师的git讲义
gitstash
保存当前状况,包括untracked的文档
untracked文档:新建的文档
gitstash-u
展示所有stashes
gitstashlist
回到某个stash的状况
gitstashapply
回到最后两个stash的状况,并删除这个stash
gitstashpop
删除所有的stash
gitstashclear
从stash中拿出某个文档的修正
gitcheckout–
展示所有tracked的文档
gitls-files-t
展示所有untracked的文档
gitls-files–others
展示所有忽略的文档
gitls-files–others-i–exclude-standard
强制删除untracked的文档
能用来删除新建的文档。如果不指定文档配置文档,则清空所有组织工作的untracked文档。clean指示,注意两点:
clean后,删除的文档无法寻回;不会影响tracked的文档的更动,只会删除untracked的文档。gitclean-f
强制删除untracked的目录
能用来删除新建的目录,注意:这个指示也能用来删除untracked的文档。详情见上一条。
gitclean-df
展示简化的commit历史
gitlog–pretty=oneline–graph–decorate–all
把某两个分支到导出成两个文档
gitbundlecreate
从包中导入分支
新建两个分支,分支文档是下面gitbundlecreate指示导出的文档
gitclonerepo.bundle-b
执行rebase以后自动stash
gitrebase–autostash
从远距库房根据ID,拉下某一状况,到邻近地区分支
gitfetchoriginpull//head:
详尽展示一行中的修正
gitdiff–word-diff
清除gitignore文档中历史记录的文档
gitclean-X-f
展示所有alias和configs
注意:config分为:当前目录(local)和全局(golbal)的config,默认为当前目录的config
gitconfig–local–list(当前目录)gitconfig–global–list(全局)
展示忽略的文档
gitstatus–ignored
commit历史中显示Branch1有的,但是Branch2没有commit
gitlogBranch1^Branch2
在commitlog中显示GPG签名
gitlog–show-signature
删除全局设置
gitconfig–global–unset
新建并切换到新分支上,同时这个分支没有任何commit
相当于保存修正,但是重写commit历史
gitcheckout–orphan
展示任意分支某一文档的文档
gitshow:
clone下来指定的单一分支
忽略某个文档的更动
关闭track指定文档的更动,也是Git将不会在历史记录这个文档的更动
gitupdate-index–assume-unchangedpath/to/file
恢复track指定文档的更动
gitupdate-index–no-assume-unchangedpath/to/file
忽略文档的权限变化
不再将文档的权限变化视作更动
gitconfigcore.fileModefalse
以最后递交的顺序列出所有Git分支
最新的放在最下面
gitfor-each-ref–sort=-committerdate–format=%(refname:short)refs/heads/
在commitlog中搜寻有关文档
通过grep搜寻,given-text:所需要搜寻的字段
gitlog–all–grep=
把甲类的指定file放在组织工作区中
不添加参数,默认是-mixed
gitreset
强制推送
gitpush-f
一图详解
原文链接:
更多阅读
Nature重磅封面:复活死亡大脑!新智元春季招聘开启,一起弄潮AI之巅!
岗位详情请戳: