您现在的位置是:首页 > 科技前沿
常用Git 备忘指南
智慧创新站
2025-05-09【科技前沿】162人已围观
简介优雅使用Git的一些实践oh-my-zsh常用命令Git常用命令git克隆远程分支仓库:gitclone-b分支名称远程地址git克隆远程仓库项目时如果不指定分支,只会克隆默认分支的内容。查看git用户名和密码分支相关gitbranch(查看当前分支)gitbranch-a(查看所有分支)gitch...
优雅使用Git的一些实践
oh-my-zsh常用命令
Git常用命令git克隆远程分支仓库:
gitclone-b分支名称远程地址git克隆远程仓库项目时如果不指定分支,只会克隆默认分支的内容。
查看git用户名和密码
分支相关
gitbranch(查看当前分支)gitbranch-a(查看所有分支)gitcheckout分支名(切换到对应分支)会自动将代码更新为分支代码gitbranch分支名(创建一个分支)gitbranch-d分支名(删除一个分支)gitbranch-D分支名(强制删除一个未合并的分支)gitcheckout-b分支名[基于的分支名或commit值](切换分支并直接切换过去)
查看git历史
history
按照关键词搜索git历史
history|greppush
查看commit历史
gitloggitlog--summary
设置git账号
"Frankkai""gaokai20100801@""Frankkai""gaokai20100801@"
查看git账号
gitconfig--global--listgitconfig--local--list
仅仅查看某一项的配置
回滚本次修改
gitresetHEADstatic/lib/js//lib/js/
查看本次修改的代码
gitdiffgitdiffHEADgitdiff--staged
提交后发现丢了几个文件没有提交
发现丢了修改记录,重新添加gitadd"*.html"重新提交,最终只有一个提交gitcommit--am
缓存某种后缀的文件
gitadd"*.js"
清除缓存区中的文件
gitresetoctofamily/
彻底删除某种后缀的文件
gitrm"*.txt"
合并分支到master
gitmerge分支名
add.之前取消提交某些文件
gitcheckout--filename
藏代码到脏目录(适用于其他成员修改了相同分支代码,但又不想提交)
gitstash
释放脏目录代码
gitstashpop
释放指定脏目录代码
gitstashpopstash@{0}
删除远程分支(此分支必须是非默认分支)
gitpushorigin--deletebranchname
已经commit,强制回退到旧版本
gitlog//找到commithash值gitreset--hardhash值
查看stash目录
gitstashlist
删除某一个stash
gitstashdropstash@{0}
设置远程仓库地址
gitremoteset-urlorigingit@:baz/
本地创建了新分支,但是orgin没有,push代码前
gitpush--set-upstreamoriginpreproduction
指定tag到远程
gitpushorigintag_name
将全部tag打到远程
gitpush--tags
查看当前tags
gittag--list
仅仅删除index不删除workingtree上的.idea文件
//--cached仅仅删除index,-r(recursive)递归删除.idea目录下的所有文件
git主动track文件,控制文件,做好提交准备
gitaddfile(s)/.
gitunstage文件,释放文件,选择性控制
gitresetHEADfile(s)/.
暂存区文件如何覆盖工作目录文件
gitresetHEADfile(s)/.gitcheckout--file(s)/.
提交已经被git管理的,modified为红色的所有文件
gitadd-u
重置工作区和暂存区的所有文件为原始状态
gitreset--hard
比较当前分支与某次提交的区别
gitdiffHEAD[commithashfragment]
删除一个分支
gitbranch-D[branchname]
同步到remote后,合并多个commit为1个
gitrebase-iHEAD~2/hashpicksquash:wq!
查看项目的origin代表的地址
gitremote-v
pick中途误退出
gitrebase--abort
未同步到remote,重新提交
resetsoft
gitflowrelease发布新版本
itpush
gitflowhotfix修复一个master上的bug
gitflowhotfixstartfoonpmversionpatch//注意:一定要在修复bug代码之前新增版本号"versionchangemessage"gitflowhotfixfinish-ngitpushgitcheckoutmastergitpush
对比2个分支的日志
gitlogdevelop..master
合并master代码到feature
gitcheckoutfeaturegitmergemaster
gitmergemasterfeature
gitrebase冲突时怎么办
squash多个commits成一个怎么敲?
假设mergefeature到master。
gitcheckoutmastergitmerge--squashfeaturegitcommit-m"这是一次squashcommit"gitpush
查看当前分支的父分支
gitreflogshowchildBranch32c3956(HEAD-currentBranch,origin/fatherBranch,fatherBranch,list)childBranch@{0}:branch:CreatedfromfatherBranch撤销远程分支错误提交
resetgitpush--force
其实使用本地分支的提交替代远程分支。
误删除领先远程的本地分支如何恢复?
gitreflog//找出最新的commitsha1值,HEAD@{1}比HEAD@{2}新gitbranchbranchNamesha1通过gitreflog找到一个commit,然后再cherry-pick也可以。
删除由npmversionpatch/minor/major误添加的tag
gittag|:refs/tags/
gitfetch与gitpull的区别
gitfetch更新origin/*下的所有分支,在发布gitflowfeature前很有用,用于更新remote分支。gitpull主要用来更新多人合作的当前分支,多用于更新local分支。
远程分支删除,本地gitfetch不能更新到最新分支
gitfetch--prune
及时查看本地所有分支的状态
gitremoteshoworigin
假如远程已不存在这个分支,gitfetch--prune也更新不到状态,该怎么办?
gitpushorigin--deletefeature/fix-chat-unread-msg-async
删除单个脱离的远程分支
gitremoteprunename
取消一次合并(merge)
gitmerge--abort
回退一次commit
gitrevertHead/[commithash]
优雅使用Git的一些实践windows下gitbash支持中文输入:
生成ssh-key
ssh-keygen-trsa-C"gaokai20100801@"
windows查看ssh-key
/c/Users/frank/.ssh/id_
mac/linux查看ssh-key
cd~/.sshlscatid_
gitflow
误删除stash,该怎么办?
gitfsck--unreachable|grepcommit|cut-d\-f3|xargsgitlog--merges--no-walk--grep=WIP
找到对应的commithash值
gitstashapply1f55da93d26cd51f15f9e93351dae6b75e25e36f
.idea修改总是会提醒,.gitignore不生效
.idea/
Git中的origin是什么?
origin是一个变量,代表着一个git仓库地址。可以使用gitremote-v查看origin代表的地址。
Git的system,global和local参数分别代表什么?
--system可以输出很多git的系统设置,其中最有用的是alias,例如gits代表了gitstatus,系统所有登录用户有用。--global输出了git的全局设置,主要包括全局的和,优先级低于单个仓库中设置的和,当前用户所有仓库有用。--local输出了git的项目设置,主要包括以及gitflow的很多配置,只对某个仓库有用。
Git工作区和暂存区的区别?
addcommit工作目录----暂存区----版本历史
暂存区:git已经获得了对文件的管理权限,暂存区文件有状态:newfile,deleted,modified等等。
版本历史:gitlog查看每一次commit记录。
意外收获:若是想非常细粒度的控制commit记录,可以使用gitadd指定文件,分开多次commit,每一次commit提交一个细粒度功能的变更文件集合,多次走文件目录暂存区版本历史这个流程。
Git如何重命名文件?
Git的workingtree和index是什么意思?
index指的是git索引,可以理解成git有文件的一个复制,仅删除index则仅删除存在于git中的文件。workingtree则是指操作系统的工作树,也就是操作系统的磁盘上存储的文件。举两个常用的例子:
仅删除gitindex中的文件,.idea等IDE隐藏的工作树文件是不能删除的:--cached
//**--cached仅仅删除index**,-r(recursive)递归删除.idea目录下的所有文件
删除index和workingtree上的文件,恩断义绝
gitrm删除index上和workingtree上的文件,
仅仅删除workingtree不删除index的情况,不存在。
nothingtocommit和workingtreeclean?
暂存区没有可以提交到版本历史的内容。工作区也是干净的。
如何一目了然地区分出工作区和暂存区?
Yourbranchisaheadof'origin/master'by1commit版本历史
Changestobecommitted暂存区
Untrackedfiles工作区
//版本历史Yourbranchisaheadof'origin/master'by1commit.(use"gitpush"topublishyourlocalcommits)//暂存区Changestobecommitted:(use"gitresetHEADfile"tounstage)renamed::helloman//工作区Untrackedfiles:(use"gitaddfile"toincludeinwhatwillbecommitted)hi
如何更加优雅地查看日志?
gitlog--oneline简洁的commit记录gitlog-n2--oneline最近的2次简洁的commit记录gitlog--all所有分支的历史版本信息gitlog--graph图形化查看版本演进历史gitlog--oneline--all-n4--graph组合查看日志
如何快速定位到git的命令文档?
githelp--weblog浏览器查看gitlog的用法
git自带的图形化界面怎么看?
gitk无需安装第三方插件,在纯命令行下,无第三方软件情况下可用。
git里的作者和提交人不一样吗?
作者是代码的生成者,是为了版权保护。
神秘的.git目录
HEAD工作分支refs/heads/fooconfigrepo的配置信息refsheads,分支;tags,标签或者里程碑refs/heads/master存放了什么,最新的一个commitrefs/tags/js01存放了什么,最新的一个tag,包含一个objectobjects文件夹,2个字符的和松散的pack文件夹,存放的是tree,tree下有blob文件可以直接通过vim修改HEAD,config等信息,和命令的作用是相同的。
如何判断git文件的类型?
gitcat-file-t/-p[hashfragment]//-t类型,-p内容只要任何文件的文件内容相同,在git眼里,它就是唯一的一个blob。
committree//位于objects目录下blob//位于objects目录的二级目录下,具体的文件
tree,commit,blob的区别?
commit:一个commit肯定会对应一棵树,包含了根tree,author,committer,parent等等一个commit对象的信息。
tree:取出一个commit,存放了一个快照,这个快照,对应了当前项目的所有的文件夹及其文件的快照,是特定时间的整个仓库的一个状态;树里可以有blob,也可以有树,因为树是文件夹;根树是最大的树。
blob:与文件名是否相同无关,只要内容相同,就是唯一的blob。
一个commit包含了哪些?
gitcat-file-p[commithashfragment]
包含tree,parent,author和commiter。
treef06f7f36af17cb9098031c66d22a7910c0fa1bacparent92a55c8a5b1d38d224232ad84b9b728ae77189cbparenteda632a1f2a3ea049c5f5268f6b2f064b71898ceauthorFrankKaigaokai20100801@+0800committerFrankKaigaokai20100801@+0800Mergebranch'feature/chatBreakChange'intoprereleasesrc/api/
一个tree包含了哪些?
gitcat-file-p[treehashfragment]
包含tree,blob。
100644tree09e231414b91779326447a0c8d5b3421aa2308c2static040000treead94369cfdd2038a552e44fc0abbd1738113
一个blob包含了哪些?
gitcat-file-p[treehashfragment]
就是一个具体的文件。
detachedHEAD是什么?
分离头指针。gitcheckout[commithashfragment],切换到分离头指针状态,不与任何branch或tag关联,git会认为这是不重要的,当成垃圾清理掉。
缺点:切换分支后,需要用gitbranch[branchname][commithashfragment]新建一个分支,否则会丢失原消息。
优点:可以基于某一次commit切出分支,然后新建一个commit,快速会退到想要的版本。
HEAD可以指向什么?
它位于.git/HEAD。
可以指向分支或者commit,但其实分支归根结底还是指向了commit。
gitlog查看HEAD指针指向的分支名:(HEAD-foo,bar,master)
可以快速diff,gitdiffHEAD[commithashfragment]。
父亲的父亲diff:gitdiffHEADHEAD~2,gitdiffHEADHEAD^^。
如何修改最新一次commit的message?
gitcommit--am注意:不能在团队的集成分支上,做这样的变更,仅适用于本地。
如何修改老旧commit的message?
gitrebase-i[父commithashfragment]reward添加修改后的commitmessage
注意:不能在团队的集成分支上,做这样的变更,仅适用于本地。
gitstashpopstash@{n}还能做什么操作?
当前分支的本地代码未提交的情况下,pull了领先的远程分支代码,此时远程代码会覆盖本地代码。
git比较聪明,它不会完全将本地的代码扔掉,即使没有人为的生成一次commit记录,也会自动为我们在stash下生成一次记录,以免造成重大的代码丢失。
gitflow模式下,如何规范版本发布?
版本号升级
gitflow对应
bug-patch
hotfix
feature-minor
release
系统重构-major
release
但是在scrum的情况下,迭代非常快速,若所有feature都升级minor,会导致minor数字很大,该怎么处理这种情况?
只升级minor时,在commit提交信息中,添加以下信息:
类型
提交信息
bugpatch
[bugpatch]
featurepatch
[featurepatch
创建一个新的项目并上传到git
gitinitgitacgitremoteaddoriginremoterepositoryURL
git参数--decorate是什么?
有short,full,auto,no几种值,--decorate=short
打印出commit的refname。
short时,refname前缀refs/head,refs/tags/和refs/remotes不会打印
full时,完整前缀会被打印
auto时,如果输出是一个终端,会按照short的方式打印;非终端会显示全部
no时,会隐藏HEAD和tag等等refs信息
默认值是short
cherrypick是什么?
如何理解gitcherrypick?
清空所有本地git缓存
gitrm-r--cache.
errorCommand"husky-run"notfound
/hooks/
一次完整的rebase流程
1.
gitrevert和gitreset的区别
gitrevert生成一个新的commit的方式回滚到上一个或者指定commit版本的代码,原理是Head继续前进。有存在被回滚掉的commit分支代码合并过来时,代码正常被合并
gitreset删除某个commit之后的代码,原理是Head向后退。有存在被回滚掉的commit分支代码合并过来时,被reset掉的代码仍然会合并上来
oh-my-zsh常用命令缩写全写对照表缩写
全写
gst
gitstatus
gaa
gitadd.
gcmsg""
gitcommit-m""
gp
gitpush
glog
gitlog--oneline--decorate--graph
gl
gitpull
gf
gitfetch
gfa
gitfetch--all--prune
使用小技巧如何修改默认指令的参数,比如,glog的decorate默认是short,我想指定glog的decorate为no,要怎么做?
glog--decorate=no
很赞哦!(158)
下一篇:低噪声放大器和高功放的区别