
想要了解为什么新增了 git restore 和 git switch 命令,需先介绍下 git checkout 命令。
git checkout 的功能根据上下文决定,这一点经常让新手感到疑惑。
git checkout 经常用来切换本地分支,即切换HEAD指向的分支。例如,从 main 分支切换到 develop 分支。
也可以让 HEAD 指针指向指定的提交,而非一个分支。此时,会进入分离分支状态(detached HEAD state)。
当为 git checkout 参数添加文件时,事情开始变得奇怪起来。它会舍弃本地修改,使用分支状态替换。例如,切换到 dev 分支后对 test.txt 文件做了一些修改,你可以使用当前分支最后提交中 test.txt 文件替换当前文件,即恢复到指定提交中的状态。
查看 git checkout 文档,会发现该命令还有一个常被忽略的参数:
<tree-ish>代表很多不同的东西,但最常见的是代表提交哈希和分支名。默认为当前分支,但也可以是任意分支、任意提交。
因此,当前在 dev 分支,想要将 test.txt 文件改变为 main 分支的版本,可以使用以下命令:
总结来看,给 git checkout 命令传递分支、提交作为参数,它会把所有文件修改到指定版本状态;如果指定了文件名称,它只会修改指定文件到指定版本。
虽然上面部分已经介绍了 git checkout 的使用细节,但确实很容易让新手产生疑惑。 git 2.23 版本引入了两个新的命令: git switch 和 git restore ,每个命令只做 git checkout 的一部分工作。 git checkout 仍然可以使用,但这两个命令对新手更友好。
git switch 用来切换分支或提交。
使用 git checkout 时,可以传入提交,切换到 detached HEAD 状态。 git switch 默认不支持此 *** 作,需提供 -d 标记:
另一点不同是,使用 git checkout 把创建、切换合并到一个命令时,使用 -b 标记:
使用 git switch 创建并切换到新分支,使用 -c 标记:
git checkout 传递文件切换文件状态部分功能由 git restore 实现。使用 git restore 命令可以把文件恢复到指定状态:
如果指定了 path,但 restore source 中不存在,则会移除文件以达到和指定版本一致的状态。
参考资料:
欢迎更多指正: https://github.com/pro648/tips
本文地址: https://github.com/pro648/tips/blob/master/sources/Git%E6%96%B0%E5%8A%9F%E8%83%BD%EF%BC%9Aswitch%E3%80%81restore.md
添加一个新功能时,不想把主分支搞乱。所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
eg:现在,加一个Vulcan的新功能,该功能计划用于下一代星际飞船。
先添加feature-vulcan分支
开发完毕:
切回 dev ,准备合并:
一切顺利的话,feature分支和bug分支是类似的,合并,然后删除。
但是!
就在此时,接到上级命令,因经费不足,新功能必须取消!
虽然白干了,但是这个包含机密资料的分支还是必须就地销毁:
销毁失败。Git友情提醒, feature-vulcan 分支还没有被合并,如果删除,将丢失掉修改,如果要强行删除,需要使用大写的 -D 参数。。
现在我们强行删除:
终于删除成功!
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过 git branch -D <name>强行删除。
日前Gitlab博客宣布发布GitLab的又一个里程碑大版本12.0。该版本主推基于全栈DevOps的全供应链安全DevSecOps,从而实现真正意义上的开发,运维和安全的有机集成。另外代码审阅一直是Gitlab比较重点突击加强的功能新版本在可视化方面做了很多事情,可以极大快速提高代码审阅流程。另外还有项目依赖列表、基于IP ACL限制能安全功能方面的功能,更多的功能请跟着虫虫一起 探索 。
GitLab在用户级别整个单个用户的合并请求并自动创建审阅预览界面(Review App)。该功能可以让每一个用户都能知道设计或UX是如何改变的。
GitLab 12.0在Review App中加入将可视化审阅工具直,拓展变更审议的能力。通过一个小代码片段,用户可以使设计人员,产品经理和其他相关人员能够快速提供有关合并请求的反馈,而无需离开应用程序。
ULTIMATE版本新版本在项目左侧边栏菜单可以列出项目的依赖关系列表(有时称为物料清单或物BOM)。
BOM可以表明项目中包含哪些组件,安全团队和合规性团队通常会审查这些依赖的组件确保没有安全问题。可以浏览相关报告,并且支持以JSON格式导出。
限制Gitlab界面的访问一直都是大家很急需的功能,新版本商业版本中支持在Gitlab中进行IP(段)限制,加入黑名单机制限制访问IP,设置更加灵活,可以自建实例可以在组级别上设置限制。(当然可以通过nginx进行IP限制,方法需要可以联系)
在GitLab 12.0中,Web IDE中的更改可以自动同步到Web终端,在提交更改之前,可以在Web终端中对其进行测试。该功能可以降低新贡献者的入门门槛,因为他们无需安装项目的本地依赖项即可查看,编辑和测试。
通过GitLab的Kubernetes集成部署JupyterHub是一种简单方便地Jupyter Notebook环境构建。利用该环境可以创建和实时代码分享,可视化、运行以后books文件。
GitLab 12.0中如果通过Gitlab、K8s部署JupyterHub到集群时,会自动安装配置JupyterLab的Git扩展。然后通过Git对环境进行完全版本控制,在Jupyter中执行Git命令。可以通过左侧面板上的Git选项卡或通过Jupyter的命令行提示符执行。
通过extends关键字,把不同内容分割为不同文件在引入,可以保持用户CI/CD配置文件整洁。在GitLab 12.0中,可以允许用户在单个作业中包含多个扩展片段来改进此功能,并且通过多个扩展,可以实现整洁简化的CI配置(处女座管理员必备)。
在GitLab 12.0中新添加了GitLab CI/CD作业扩展和折叠日志的输出。用户可以更轻松地调试作业中的某些步骤,并在需要时浏览整体步骤。
gitlab公开了漏洞数据库项目(/gitlab-org/security-products/gemnasium-db)。用户可以查看具体条目并验证感兴趣的漏洞,也支持用户一起参与完善该咯多干数据库。
依靠LDAP的组织通常需要于GitLab同步以进行权限管理。在GitLab 12.0中,实例可以阻止具有实例级设置的非管理员在LDAP之外进行权限更改。通过该方法,具有合规性的组织可以使用这个选项来确保LDAP中的权限映射到Gitlab实例,而不能由非实例管理员的用户修改。
GitLab Ultimate 11.9(功能标志)中引入的GitLab Insights现在在GitLab Ultimate 12.0中默认启用。
可以统计项目中重要的数据的统计,比如给定时间段创建/关闭的问题,合并请求的平均合并时间等等。
在GitLab 11.8中,引入了从上游桥接作业触发下游管道的功能。还介绍了将变量传递给下游管道的基本支持。在GitLab 12.0中新增加支持将当前环境变量传递到下游管道。可以允许用户向下游管道提供上下文以及提交,合并请求或触发它的管道的其他细节。
在GitLab 11.11中,启动了依赖代理的MVC,它允许用户下载和缓存Docker镜像,以便更快,更可靠地下载。在GitLab 12.0中,在组级别默认启用了该功能。
Container Registry API允许GitLab用户以编程方式轻松管理注册。GitLab 12.0中更新了权限模型,以允许开发人员删除标签。
在GitLab 12.0中,当重新打包Git存储库时,bitmap缓存将保存在bitmap索引中。缓存提高了重打包性能。(3.5.0之前的 JGit 版本与bitmap不兼容)
在此版本之前,GitLab无服务器功能只能在通过GitLab安装的Knative上使用。在GitLab 12.0中以安装的Knative被GitLab Serverless利用。可以手动添加现有Knative集群,将相关的无服务器模板添加到项目中。所以GitLab Serverless可与托管的Knative产品一起使用,例如Google的GKE上的Cloud Run或在IBM托管的Knative服务。
从GitLab 12.0开始,可以直接从GitLab的环境仪表板中提供并轻松访问外部仪表板。
现有的用于讨论合并请求和问题的设计涉及许多框和边界,难以对对话进行跟踪。在新版本中,对此做了重新设计来增强用户的讨论体验。
动态应用程序安全性测试(DAST)不再需要在Docker中使用Docker来运行。因此,DAST Docker镜像(3GB)现在将在Runners上缓存。(注意镜像每周更新一次,因此缓存将在每周一失效)。
在12.0中,添加了为群组通知设置电子邮件地址的功能。可以让用户将组通知发送到不同的电子邮件地址。例如,工作组的工作电子邮件地址和个人组的个人电子邮件地址(个人设置项目里面有电子邮件菜单用以添加邮件地址)。
在解除扫描程序发现的漏洞时,新添加一个字段可用于添加详细说明此漏洞被解除的原因。
这将使安全团队和开发人员能够查看 历史 记录并了解未修复项目的原因。
由于审计等原因可能希望确保项目(可能包括存储库中的重要代码)只能存档,而不会被删除和永久丢失。新版本可以通过实例级设置来防止非管理员删除项目。
自GitLab 8.9起,GitLab CI/CD通过在作业定义中指定GIT_DEPTH变量来支持浅git克隆。新版本中添加了在项目级别设置clone深度的功能,项目维护者可设置默认为浅层克隆。浅Git克隆比每次克隆整个Git存储库更快,如果CI/CD作业设置为构建最新代码,通常浅的克隆就足够了。
同样在GitLab 12.0中,默认情况下,在GitLab中创建的新项目在创建时的GIT_DEPTH设置为50。该默认设置将帮助用户使用GitLab CI/CD实现更快的克隆和构建时间,同时仍允许高级用户在不同类型的CI/CD用例需要时更改此设置。
Fork工作流程创建一个副本,用户修改该副本并合并到上游项目,从而轻松地加速了协作,这也是Github等Git项目得以流行的功能。但是对一个热门的项目,可能会存在数以千计的副本,存储这些副本需要消耗大量的服务器资源。
GitLab 12.0中,实例管理员可以使用object_pools功能标志启用Git对象重复数据删除。启用后,创建公共分支也将创建对象池并使用objects/info/ alternates来减少分叉的存储要求。对象重复数据删除需要启用散列存储,并且父项目要使用散列存储。现有的forks还没有自动迁移到对象池。在后续即将将发布的版本中,会通过直接在重复数据删除状态下创建fork来实现快速fork。当前版本还需要首先创建fork,然后进行重复数据删除。
从2019年5月30日起,GitLab在线git服务已启用对象重复数据删除。自建实例但默认情况下关闭该功能,因为在获取时会显示重复警告。
手动添加Kubernetes集群需要输入多个数据点,并且容易出错。为了在手动添加集群解决访问和权限问题,kubernetes集成支持将验证API URL的可访问性以及集群令牌和CA证书的有效性。
在GitLab 12.0中,过Zoom电话会议轻松与团队成员就问题进行协作。在问题说明中粘贴会议链接。 GitLab将检测链接并在标题下方的顶部显示"加入Zoom会议"按钮,使其显示给所有协作者。
用户能够在问题中定义任务,并且该信息在整个应用程序的各个位置会显示。在GitLab 12.0中,用户可以通过API返回任务进度信息。
之前版本用户无法从问题API获取详细的问题统计信息。在GitLab 12.0中添加了返回所有、已关闭和已打开状态的问题统计的功能。
GitLab 12.0中Omnibus改进包括:
引入Mattermost 5.11,这是一个开源的Slack替代品,其最新版本包括一个新的远程CLI工具,及更多功能。此版本还包括安全更新,尽快升级到新版本来。
默认情况下启用JSON日志记录。
omnibus-gitlab默认会启用Grafana服务。此外,现在已经实现GitLab和Grafana自动启用OAuth身份验证。
使用一些直接检测的ruby指标改进了GitLab指标
GitLab还同期发布了GitLab Runner 12.0。主要变化如下:
Docker Credentials帮助程序支持;
在注册时为跑步者添加access_level配置;
允许Kubernetes Executor配置Pod安全上下文;
为新注册的Windows shell执行程序设置PowerShell默认值;
支持Windows docker卷配置。
同时GitLab Runner 12.0版本,也删除了一些此前弃用的东西:
删除已弃用的clone/fetch命令
删除已弃用的git clean策略
删除对已弃用的metrics_server设置的支持
删除对K8S的已弃用入口点配置的支持
删除对已弃用的S3缓存配置的支持
删除对已弃用分发的支持
删除旧的docker helper image命令
可以在GitLab Runner的CHANGELOG中找到所有更改的列表。
GitLab 12.0在性能方面的一些改进包括:
epics列表页面系能做了性能大幅度优化。
避免为Elasticsearch结果访问数据库,避免两次针对搜索结果点击Elasticsearch。
批量提交文档到ElasticSearch索引;
缓存在提交消息中呈现Markdown以提高列表提交的性能;
提高每次推送的存储库大小限制检查的性能;
使用长描述加载问题或合并请求时提高性能;
通过建议的更改提高合并请求的性能;
重新打包Git存储库时,通过使用delta岛来提高性能并减少克隆的CPU使用率;
提高监控图表的性能;
修复ListLastCommit RPC上的Git N+1;
使用--perl-regexp提高Git代码搜索性能;
通过修复Git N + 1来提高JobsController的性能;
GitLab的主要维护版本版本这中,删除对GitLab 9.x的支持。最低支持版本提高到GitLab 10.0。
启用日期:2019年6月22日
在GitLab 12.0,GitLab Geo需要使用Hashed Storage来缓解辅助节点上的竞争条件。请使用"sudo gitlab-rake gitlab:geo:check"检查是否启用了Hashed Storage并迁移了所有项目。
迁移日期:2019年6月22日
在GitLab 12.0中,Geo需要PostgreSQL外部数据包装器,将最低PostgreSQL版本提高到9.6。 GitLab Geo使用PostgreSQL Foreign Data Wrapper来查询来自不同PostgreSQL实例的数据。这是Geo Log Cursor所必需的,可以显著提高了某些同步 *** 作的性能。 Foreign Data Wrapper还提高了Geo节点状态查询的性能。对于大型项目,遗留查询具有不可接受的性能。
迁移日期:2019年6月22日
在GitLab 12.1中将删除Kubernetes部署选择器的应用程序标签匹配(删除最初计划为12.0)。在GitLab 11.10的一部分,gitlab引入了一种新的匹配机制,它使用app.gitlab.com/app和app.gitlab.com/env来展示部署板上的部署。要在部署板中查看这些部署,需要做的就是推送新部署,GitLab将使用新标签进行部署。
移除日期:2019年6月22日
新的KUBE_INGRESS_BASE_DOMAIN环境变量在GitLab 11.8部分引入。不再需要使用AUTO_DEVOPS_DOMAIN来定义多个域,因为现在可以在群集页面上单独定义这些域。
移除日期:2019年6月22日
在GitLab 12.1中计划删除实例级Kubernetes服务模板,以支持在GitLab 11.11中引入的实例级集群功能。
作为升级到GitLab 12.0的一部分,任何使用服务模板的自建gitlab实例都将迁移到实例级集群。
移除日期:2019年6月22日
在GitLab 12.0中完全删除了对skip_auto_migrations文件的支持。该文件在GitLab 10.6中已被弃用。
移除日期:2019年6月22日
GitLab 12.0中完全取消了对Prometheus 1.x的支持。
移除日期:2019年6月22日
openSUSE 42.3将于2019年6月30日到期。gitlab将会在12.2中放弃支持。
移除日期:2019年8月22日
GitLab 11.9开始GitLab Runner一直在使用一种新方法来克隆/获取存储库。在目前版本,如果不支持新方法,GitLab Runner将使用旧方法。
在GitLab 11.0中,我们更改了为GitLab Runner配置度量服务器的方式。 metrics_server已被删除,转而使用GitLab 12.0中的listen_address。
在11.3中,GitLab Runner开始支持多个缓存提供程序。这导致特定于S3的配置的新设置。
GitLab 12.0中将不再提供这些路径。对于从11.9+以上的用户,直接升级不会有任何影响。
弃用日期:2019年6月22日
在GitLab 11.4中,GitLab Runner引入了一个功能标志FF_K8S_USE_ENTRYPOINT_OVER_COMMAND。在GitLab 12.0中,将删除这些功能标志。
移除日期:2019年6月22日
GitLab Runner中一些Linux发行版已达到End of Life支持。GitLab 12.0中,GitLab Runner不再提供专门分发包给过期的Linux发行版。
弃用日期:2019年6月22日
作为添加对Windows Docker执行程序的支持的一部分,需要弃用一些用于帮助程序镜像的旧命令。在GitLab 12.0中,GitLab Runner开始使用新命令。这仅影响覆盖帮助程序镜像的用户。
迁移日期:2019年6月22日
使用GitLab Runner 11.10引入了一种配置Runner如何执行git clean命令的方法。新的清理策略删除了git reset的使用,并在checkout之后删除了git clean命令。在GitLab Runner 12.0中,GitLab Runner放弃了对旧版清理策略的支持,并删除了使用功能标志设置恢复该功能的方法。
弃用日期:2019年6月22日
许可证管理做了重新命名以便更好地与GitLab 12.0中的常见行业用语一致。许可证合规性的目的是分析应用程序,跟踪第三方组件(如库和外部依赖项)使用的许可证,并检查它们是否与项目的许可模型兼容。许可证合规性安全软件组合分析组的一部分。
迁移日期:2019年6月22日
命令行参数--auth-first-page,不再受支持,需要删除此参数。
DEP_SCAN_DISABLE_REMOTE_CHECKS标志变量,不再受支持,需要删除此参数。
GITLAB_FEATURES环境变量中的sast_container值,必须更改为container_scanning。
迁移日期:2019年6月22日
新版本不再更新在项目管道中配置安全功能时使用的文档中安全手动配置代码段。请使用include: template: Dependency-Scanning.gitlab-ci.yml配置中使用Secure的include。
弃用日期:2019年6月22日
为了缓解这种情况,默认情况下将禁用前进3DES。对于现代浏览器的用户,这不应该改变任何内容,但是在Windows XP *** 作系统上运行的Internet Explorer版本7和8的某些用户可能会受到影响。
弃用日期:2019年6月22日
GitLab 12.0是支持MySQL(和MariaDB)的最后一个版本。用户需要迁移到PostgreSQL才能使用未来版本。 MySQL已被弃用,对它的支持以前仅限于Enterprise Edition Starter和Premium。
弃用日期:2019年7月22日
GitLab 12.1中的UI中会删除这些设置,该策略已在GitLab 11.11中的gitlab.yml中提供。此外,还可以定义Sentry环境,以区分开发,stagin和生产等多个部署。
迁移日期:2019年7月22日
当我们在GitLab 11.6中引入组级项目模板时,将该功能扩大化了。通过给予低于Silver/Premium的现有用户/实例三个月的宽限期来修复GitLab 11.11中的这个错误。2019年8月22日,此宽限期将到期,组项目模板将需要Silver/ remium或更高版本。
迁移日期:2019年8月22日
如果使用Python 2的用户在开始使用GitLab 12.2时进行自我管理,则需要将CI变量LM_PYTHON_VERSION设置为"2"。使用Python 3的用户现在可以将CI变量LM_PYTHON_VERSION更改为"3"。
迁移日期:2019年8月22日
在GitLab 12.3计划弃用GitLab Runner中的Windows批处理命令行作业(例如cmd.exe),以支持对Windows PowerShell的扩展和扩展支持。对于可能仍希望针对cmd.exe运行项目的用户,可以从PowerShell调用这些命令,但不会为Windows批处理提供直接支持。
弃用日期:2019年9月22日
使用GitLab Runner 11.10,当使用Docker和Docker Machine执行程序已更改了共享卷中缓存作业目录部分。 GitLab Runner现在缓存使用builds_dir配置的整个基本目录,而不是仅缓存作业工作目录的父目录。因为它是一个行为改变,我们添加了一个功能标志,允许控制是否应该使用新的或旧的行为。在GitLab Runner 12.3,将删除功能标志和旧有行为。
迁移日期:2019年9月22日
Python 2.7在2020年1月1日达到其生命周期,因此将在未来的GitLab版本中删除对Python 2的支持。
迁移日期:2019年12月22日
如果使用Omnibus安装自建实例,通过发行版办的包管理器直接升级即可:
比如CentOS下可以直接通过yum updata gitlab-ce自动完成升级过程。
GitLab 12.0将Enterprise Edition多年来进行的数据库更改合并到Community Edition中。作为这项工作的一部分,还删除了各种旧迁移。升级到GitLab 12的用户必须先升级到最新的 11.11 补丁版本,然后再升级到 12.0.0 。升级到12.1.0等未来版本时,用户必须先升级到12.0.0。如果不按照此顺序升级可能会导致数据迁移未成功,从而导致应用程序错误。 Omnibus安装会先强制升级到12.0.0。 通过源码安装用户必须按照这个顺序受手动处理 (XX-> 11.11->12.0 ->YY)。
GitLab 12.0默认使用Hashed Storage。这会影响新安装。
GitLab 12.0将自动将PostgreSQL版本升级到10.0。
用户可以跳过PostreSQL 10.0的自动升级,创建/etc/gitlab/ disable-postgresql-upgrade。
如果使用GitLab Geo,将在主节点和所有辅助节点上跳过自动PostgreSQL升级。我们将在12.1中为Geo用户提供升级路径。
默认情况下,GitLab 12.0将启用JSON日志记录。并提供了保留以前非JSON的日志格式的设置文档。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)