如何使用带参数的嵌套命令创建 Git 别名?

2023-12-13

在我的点文件中,我有以下有效的函数:

function undelete {
  git checkout $(git rev-list -n 1 HEAD -- "$1")^ -- "$1"
}

...我这样使用:

$ undelete /path/to/deleted/file.txt

我想确定这个命令的范围,因为它是一个 git 命令。

如何创建 git 别名以便可以使用此 git alias 命令?

$ git undelete /path/to/deleted/file.txt

这是我的两个尝试,但不起作用:

git config --global alias.undelete "!f() { git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1; }; f"
git config --global alias.undelete "!sh -c 'git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1' -"

It is可以使用别名来做到这一点(参见jthill 的评论):

git config --global alias.undelete '!f() { git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1; }; f'
git config --global alias.undelete '!sh -c "git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1" -'

我建议将任何复杂的内容编写为 shell 脚本:

#! /bin/sh
#
# git-undelete: find path in recent history and extract
. git-sh-setup # see $(git --exec-path)/git-sh-setup

... more stuff here if/as appropriate ...
for path do
    rev=$(git rev-list -n 1 HEAD -- "$path") || exit 1
    git checkout ${rev}^ -- "$path" || exit 1
done

(the for循环的目的是使其允许多个路径名“取消删除”)。

为脚本命名git-undelete,将其放入您的$PATH(我将脚本放入$HOME/scripts),并且任何时候你跑步git undelete,Git 会找到你的git-undelete脚本并运行它(使用$PATH修改为有git --exec-path放在前面,以便. git-sh-setup works).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用带参数的嵌套命令创建 Git 别名? 的相关文章

  • 使当前提交成为 Git 存储库中唯一(初始)提交?

    我目前有一个本地 Git 存储库 我将其推送到 Github 存储库 本地存储库有约 10 次提交 Github 存储库是其同步副本 我想要做的是从本地 Git 存储库中删除所有版本历史记录 以便存储库的当前内容显示为唯一提交 因此存储库中
  • 如何查看正在运行的 tcsh 版本?

    如何查看我的 UNIX 终端中运行的 tcsh 的当前版本 看着那 这version多变的 echo version tcsh 6 14 00 Astron 2005 03 25 i386 intel linux options wide
  • `git push` -- 没有输出,什么也没有发生

    touch test git add test git commit m test git push u origin master 这奏效了 该文件已上传到存储库 rm test cp R website website git rm t
  • 如何在不在存储库中的情况下执行 Git 命令?

    有没有一种方法可以在不位于存储库的情况下对存储库执行 Git 命令 例如这样的事情 git home repo log 请不要告诉我cd到它 我正在通过一个exec call Use C作为 git 的第一个参数 git C home re
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • git merge 冲突的不同场景

    我试图了解 git 合并后可能发生 git 冲突的情况以及如何避免它们 我创建了一个 git 存储库并向其中添加了一个文本文件 我已将 1 添加到文本文件中并将其提交给 master 我已经从 master 创建了一个新分支 分支 2 并将
  • 当 grep "\\" XXFile 我得到“尾随反斜杠”

    现在我想查找是否有包含 字符的行 我试过grep XXFile但它暗示 尾随反斜杠 但当我尝试时grep XXFile没关系 谁能解释一下为什么第一个案例无法运行 谢谢 区别在于 shell 处理反斜杠的方式 当你写的时候 在双引号中 sh
  • Git:如何修改服务器的提交?

    我已经在 EC2 上的 git 服务器上推送了一些提交 而不是在 github 上 如何修改 git 服务器上的这些提交 操作就像 删除提交 例如变基 更改提交消息 是否可以 非常感谢 你几乎可以通过用力推动来完成所有事情 将您的本地树更改
  • 为 RHEL 6 安装/构建 git-svn

    我无权访问 RHEL6 存储库 那么在 RedHat Enterprise Linux 6 上构建和 或安装 git svn 工具的最佳方法是什么 通过卸载现有的 yum擦除git 并从源安装最新的来设法安装git和git svn 1 7
  • 符合 POSIX 标准的 shell 相当于 Bash“while read -d $'\0' ...”?

    我正在尝试使 Bash 脚本严格符合 POSIX 标准 即消除任何潜在的 Bashisms http mywiki wooledge org Bashism 通过使用checkbashisms px script filename 在给定的
  • 使用Git记录文件复制操作

    当我使用 git mv 在 git 中移动文件时 状态显示该文件已被重命名 即使我更改了某些部分 它仍然被认为几乎是相同的东西 这很好 因为它让我可以跟踪它的历史记录 当我复制文件时 原始文件有一些历史记录 我想将其与新副本关联起来 我尝试
  • Git:如何正确合并两个功能完全不同的分支?

    想象一下这样一种情况 同一个项目有两个分支 第一个分支的一部分对另一个分支进行了大幅重构 但有一段时间 您需要保持两个分支的功能 因此您需要对两个分支进行错误修复和关键功能添加 有时是以不对称的方式 在某些时候 您必须将重构的分支合并到原始
  • 有没有办法导入/导出容器绑定脚本

    我有一个插件 它使用 appscripts gs 以及 html js 和 css 文件 目前我们所做的是我们有一个参考 Google 文档 其中有一个脚本项目包含所有这些源代码 但是除了手动复制和粘贴之外 没有办法在 GIT 中保留源代码
  • 如何更改 GitHub 上的文件模式?

    git add test file git commit m first commit create mode 100644 test file git push git update index add chmod x test file
  • 在 C# 中读取/写入命令行程序

    我正在尝试与 C 的命令行程序进行对话 它是一个情绪分析器 它的工作原理如下 CMD gt java jar analyser jar gt Starting analyser 这是我想从我的 C 程序插入内容的地方 例如 I love y
  • npm install 的问题(Angular)

    今天我尝试创建一个新项目 所以我使用这个命令 ng new NAME style less 并在我的cmder中弹出错误和警告 所以我卸载了 Roaming npm 和 npm cache 中的节点和文件 然后我安装了node并再次下载cm
  • 使用 plistBuddy 获取值数组

    var keychain access groups declare a val usr libexec PlistBuddy c Print var sample plist echo val echo val 0 Ouput Array
  • 如何在多个不同的分支上工作,以便我可以在它们之间轻松切换?

    有没有办法在 GIT 中处理同一个文件但不同的功能 分支 我确信有办法 但最简单的方法是什么 我不想隐藏我的更改 因为这很麻烦 借助 SVN 我能够将 2 个独立的分支作为 2 个不同的实体进行工作 无需任何干预 并且可以轻松在两者之间切换
  • 使用 git 合并两个截然不同的分支?

    我有我的master分支和我的verydifferentbranch它们有相同的祖先 大约 300 次提交前 现在verydifferentbranch功能完整我想把它放在master下面branch 进行变基会导致每个补丁都有很多合并冲突
  • 如何从 Git 存储库中删除选定的提交日志条目,同时保留其更改?

    我想从线性提交树中删除选定的提交日志条目 以便这些条目不会显示在提交日志中 我的提交树看起来像 R A B C D E HEAD 我想删除 B 和 C 条目 以便它们不会显示在提交日志中 但应保留从 A 到 D 的更改 也许通过引入单个提交

随机推荐

  • 无法在 Mac 上创建开发者证书

    这件事发生在一夜之间 昨天我能够处理我的 NET Core 应用程序 现在每次我尝试做一个dotnet run我在 cmd 行中收到以下错误 如您所见 我尝试运行建议的命令来创建开发人员证书 其中dotnet dev certs https
  • 如何在 Visual Basic 中使用 while 循环从 StreamReader 中读取数据?

    考虑 Dim line As String Using readFile As New StreamReader SalesUpdateFile While line readFile ReadLine IsNot Nothing 我是 V
  • 没有可行的从 std::function 到 bool 的转换

    C 11std function应该执行operator bool const 那么为什么 clang 告诉我没有可行的转换呢 include
  • R-向 PDF 添加页码

    我在向 PDF 添加页码时遇到问题 这是我插入页面 绘图的方法 pdf file pdfFilePath width 11 height 8 5 for grid newpage pushViewport viewport layout g
  • 从 Google 表格调用时 getOAuthToken 返回 null

    我正在研究一种方法 通过 oAuth 规范和 AWS API 网关调用来限制特定用户的某些 Google 表格 但我遇到了一个问题ScriptApp getOAuthToken 功能 当我使用 Google Apps 脚本调试器运行代码时
  • 动态背景(在 LinearLayout 上)-我的错误是什么?

    我有一个问题 我试图让我的应用程序背景根据计时器每十秒改变一次 我已经做了我能做的 但无法解决它 因为我是 java 和编程的初学者 我如果有人可以纠正我的代码 我会很高兴 我可以将它打包到手机等中 Eclipse不会显示错误 但当计时器开
  • 为什么Unity3D中相机绕z轴旋转?

    我有一个主摄像头在 Unity3D 中 我想根据鼠标输入进行旋转 因此它可以作为第一人称视频游戏 您可以根据要查看的位置移动鼠标 相机的起始值 Unity 中 检查器 选项卡中的 变换 选项卡 为 Position X 1 Y 1 Z 11
  • 将“facet_grid”从多面画布上拉开?

    考虑以下示例 ggplot2 facet grid p lt ggplot mpg aes displ cty geom point p facet grid vars drv vars cyl Which results in the f
  • Safari 应用扩展未安装

    仅供参考 我对 XCode 开发完全陌生 我有一个 Safari 应用程序扩展项目 如果我从 XCode 中运行它 它会将我的扩展添加到 Safari 中 如果我创建存档 导出并选择 导出开发签名应用程序 我可以获取生成的文件 将其安装在另
  • 使用 FileMapping 传递 _EXCEPTION_POINTERS * 时遇到问题

    我想做一个进程外异常处理程序 并且创建了一个看门狗进程 当子进程引发异常时 它会进行专门的异常处理 我已经通过事件成功调用了看门狗进程 我面临的问题是在尝试将异常信息指针传递给其他进程时 我降落在这里将指针传递给由 exec 生成的进程并了
  • 在 Objective-C 中转发声明协议

    我的类 h 看起来像 protocol AppInfoDelegate class InfoTextView interface AppInfoViewController UIViewController
  • 是否可以通过JavaScript检测插件是否激活?

    这样我通常会检测插件 例如Flash播放器 for var el in navigator plugins if navigator plugins el name navigator plugins el name toLowerCase
  • 批量创建文件夹列表:无法回显重音字符

    我使用此批处理指令生成不包含 zip 文件的每个子目录的列表 echo off for d r f in do if not exist f zip echo f gt gt G backup folders txt 问题是这会生成一个列表
  • 防止浏览器在提交表单时跳转到首页

    我试图防止用户提交表单时页面跳转到顶部 有很多人建议return false 但是 它也阻止了表单的提交 我想知道是否有人可以帮助我 JQuery submit click function doesn t work return fals
  • 收据打印机 - 从网页打印

    我有一台收据打印机 它连接到我的计算机上的串行 COM1 我正在尝试从网页打印收据 当打印时 它只是一个空白 没有任何文本 空白收据 它在 IE8 上工作正常 但在 Firefox 3 6 上不起作用 我有一台 Epson TM T88II
  • Stream.Seek(0, SeekOrigin.Begin) 或 Position = 0

    当您需要将流重置为开始时 例如MemoryStream 是使用的最佳实践 stream Seek 0 SeekOrigin Begin or stream Position 0 我发现两者都工作得很好 但想知道其中一个是否比另一个更正确 U
  • 将带有内部链接的 Excel 转换为 pdf

    我正在尝试将带有内部链接 即指向同一 Excel 中不同位置的链接 的 Excel 转换为 pdf 我已经浏览了网上关于这方面的几篇文章 但似乎找不到任何适当的解决方案来进行这种转换 提供的解决方案主要适用于外部超链接 而不适用于内部超链接
  • 如何发出帖子请求来创建新用户

    我正在使用react chat engine 创建一个聊天应用程序 一切都运转良好 除了我不知道如何发出帖子请求来创建新用户这一事实 这是我的代码 const handelSubmit async e gt e preventDefault
  • eclipse无需jdk运行程序

    为什么我们不需要安装jdk就可以在eclipse中编译执行java程序呢 jre安装就足够了 但是在从cmd运行代码时我们需要安装jdk eclipse 是否附带任何替代 javac 我尝试在 eclipse 文件夹中搜索 javac 但没
  • 如何使用带参数的嵌套命令创建 Git 别名?

    在我的点文件中 我有以下有效的函数 function undelete git checkout git rev list n 1 HEAD 1 1 我这样使用 undelete path to deleted file txt 我想确定这