zoukankan      html  css  js  c++  java
  • (Git 钩子)自定义你的工作流 和引用日志

    Git 钩子是在 Git 仓库中特定事件发生时自动运行的脚本。它可以让你自定义 Git 内部的行为,在开发周期中的关键点触发自定义的行为。

    Git 钩子最常见的使用场景包括推行提交规范,根据仓库状态改变项目环境,和接入持续集成工作流。但是,因为脚本可以完全定制,你可以用 Git 钩子来自动化或者优化你开发工作流中任意部分。

    Git 钩子是仓库中特定事件发生时 Git 自动运行的普通脚本.钩子在本地或服务端仓库都可以部署,且只会在仓库中事件发生时被执行.

    安装钩子

    钩子存在于每个 Git 仓库的 .git/hooks 目录中。当你初始化仓库时,Git 自动生成这个目录和一些示例脚本.

    但是 .sample 拓展名防止它们默认被执行。为了安装一个钩子,你只需要去掉 .sample 拓展名。或者你要写一个新的脚本.

    本地钩子

    所有带 pre- 的钩子允许你修改即将发生的操作,而带 post- 的钩子只能用于通知.

    pre-commit

    pre-commit 脚本在每次你运行 git commit 命令时,Git 向你询问提交信息或者生产提交对象时被执行。你可以用这个钩子来检查即将被提交的代码快照。比如说,你可以运行一些自动化测试,保证这个提交不会破坏现有的功能。

    >/dev/null 2>&1 这部分屏蔽了 任何输出。

    服务端钩子

    这些钩子都允许你对 git push 的不同阶段做出响应

    pre-receive

    pre-receive 钩子在有人用 git push 向仓库推送代码时被执行。它只存在于远端仓库中,而不是原来的仓库中。如果你不喜欢推送的那个人,提交信息的格式,或者提交的更改,你都可以拒绝这次提交.你可以用 pre-receive 防止这些代码流入官方的代码库.

    update

    update 钩子在 pre-receive 之后被调用,它可以分别被每个推送上来的引用分别调用。也就是说如果用户尝试推送到4个分支,update 会被执行 4 次.

    post-receive

    post-receive 钩子在成功推送后被调用,适合用于发送通知.

    Git 提交引用和引用日志

    特殊的引用

    除了 refs 文件夹外,.git 根目录还有一些特殊的引用。如下所示:

    • HEAD – 当前所在的提交或分支。
    • FETCH_HEAD – 远程仓库中 fetch 到的最新一次提交。
    • ORIG_HEAD – HEAD 的备份引用,避免损坏。
    • MERGE_HEAD – 你通过 git merge 并入当前分支的引用(们)。
    • CHERRY_PICK_HEAD – 你 cherry pick 使用的引用。

    相对引用

    ~ 符号让你访问父节点的提交

    #显示 HEAD 祖父节点的提交
    git show HEAD~2
    

    ~ 符号总是选择合并提交的第一个父节点。如果你想选择其他父节点,你需要用 ^ 符号来指定

    #HEAD 是一个合并提交,下面这个命令返回 HEAD 的第二个父节点:
    git show HEAD^2
    
    # 只列出合并提交的第二个父节点的父节点
    git log HEAD^2
    # 移除当前分支最新的 3 个提交
    git reset HEAD~3
    # 交互式rebase当前分支最新的 3 个提交
    git rebase -i HEAD~3
    

    引用日志

    它记录了你在仓库中做的所有更改,不管你有没有提交。你也可以认为这是你本地更改的完整历史记录

    git reflog
    

    HEAD{} 语法允许你引用保存在日志中的提交.

    假设你意识到了你不应该丢掉你全部的工作。你只需要切换到 HEAD@{1} 这个提交就能回到你运行 git reset 之前仓库的状态

    git checkout HEAD@{1}
    

    这会让你处于 HEAD 分离的状态。你可以从这里开始,创建新的分支,继续你的工作。

    总结

    它的意义在于:在任何开发场景下,你都能找到你需要的特定提交。你很容易就可以把这些技巧用在你一有的 Git 知识中,因为很多常用的命令都接受引用作为参数,包括 git log、git show、git checkout、git reset、git revert、git rebase 等等

  • 相关阅读:
    第三节课 字符串拼接、格式化输出、深浅复制
    第四节课 集合、字典、运算符
    python-模块系列
    python正则表达式
    python第二天
    Python-第一天
    SQL SERVER 最近查询过的语句
    razor page 页面
    RAZOR显示表格数据
    邮件模板 C#
  • 原文地址:https://www.cnblogs.com/zhangjianbin/p/7778850.html
Copyright © 2011-2022 走看看