嵌入式软件工程师-嵌入式开发工具-Git版本控制_Git高级特性:重置撤销与钩子.docx

嵌入式软件工程师-嵌入式开发工具-Git版本控制_Git高级特性:重置撤销与钩子.docx

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

PAGE1

PAGE1

Git高级特性概览

1重置与撤销的基本概念

在Git中,重置和撤销是两个强大的特性,用于帮助开发者管理代码历史,处理错误提交,以及在开发过程中进行代码的回滚。理解这两个概念对于高效地使用Git至关重要。

1.1重置(Reset)

重置是Git中用于将工作目录、暂存区或提交历史回滚到先前状态的命令。它有三种主要的模式:

--soft:只移动提交指针,不改变暂存区或工作目录。

--mixed:移动提交指针,清空暂存区,但不改变工作目录(这是默认模式)。

--hard:移动提交指针,清空暂存区,并将工作目录恢复到指定的提交状态。

1.1.1示例

假设你有以下的提交历史:

A-B-C-D-E

其中,E是当前HEAD指向的提交。

使用--soft模式重置到C:

gitreset--softC

这将把HEAD指针移动到C,但暂存区和工作目录保持不变。

使用--mixed模式重置到C:

gitresetC

或者

gitreset--mixedC

这将把HEAD指针移动到C,并清空暂存区,但工作目录中的文件状态保持不变。

使用--hard模式重置到C:

gitreset--hardC

这将把HEAD指针移动到C,清空暂存区,并将工作目录恢复到C的状态。

1.2撤销(Revert)

撤销是创建一个新的提交,以撤销先前提交的更改。与重置不同,撤销不会改变历史,而是通过创建新的提交来“修复”历史。

1.2.1示例

假设你有以下的提交历史:

A-B-C-D-E

其中,E包含了一些你想要撤销的更改。

撤销E的更改:

gitrevertE

这将创建一个新的提交F,其效果是撤销E的更改,但保留了E在历史中的位置。

A-B-C-D-E-F

在F中,E的更改被逆向,但E仍然在历史中,这有助于保持历史的完整性。

2Git钩子的介绍与分类

Git钩子(Hooks)是Git提供的一系列脚本,用于在Git生命周期的特定点上执行自定义动作。它们可以用于自动化任务,如构建、测试,或用于强制执行项目标准,如代码格式化和提交消息格式。

2.1钩子分类

Git钩子分为两类:客户端钩子和服务器端钩子。

客户端钩子:在本地Git仓库中运行,用于自动化或控制本地操作。

服务器端钩子:在远程Git仓库的服务器上运行,用于控制或自动化服务器端操作,如权限检查和部署。

2.1.1客户端钩子示例

pre-commit:在提交前运行,可以用于检查即将提交的代码是否符合项目标准。

#!/bin/sh

#检查工作目录中是否有未暂存的更改

if[-n$(gitstatus--porcelain)];then

echo工作目录中有未暂存的更改,请先暂存或放弃更改。

exit1

fi

#检查暂存区中的文件是否通过代码格式检查

if!gitdiff--cached--name-only|xargsclang-format-diff-p1--dry-run;then

echo暂存的代码未通过格式检查,请使用clang-format重新格式化代码。

exit1

fi

#如果所有检查都通过,提交继续

echo所有检查通过,提交继续。

exit0

这个脚本首先检查工作目录中是否有未暂存的更改,如果有,则阻止提交。然后,它使用clang-format-diff工具检查暂存的代码是否符合代码格式标准。如果不符合,脚本将阻止提交并提示开发者重新格式化代码。

2.1.2服务器端钩子示例

pre-receive:在接收推送的提交前运行,可以用于检查推送的提交是否符合项目标准或权限要求。

#!/bin/sh

#检查推送的提交是否包含敏感信息

whilereadoldrevnewrevrefname;do

if[$refname=refs/heads/master];then

gitdiff--name-only$oldrev$newrev|grep-qEpassword|secret

if[$?-eq0];then

echo提交中包含敏感信息,推送被拒绝。

exit1

fi

fi

done

#如果所有检查都通过,推送继续

echo所有检查通过,推送继续。

exit0

这个脚本检查推送的提交是否包含敏感信息,如密码或秘密。如果在master分支的提交中检测到敏感信息,脚本将阻止推送并提示用户。这有助于保护项目免受意外泄露敏感信息

文档评论(0)

kkzhujl + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档