在 git Push 上硬重置

2024-07-04

我有一个接收后挂钩脚本位于我正在推送的远程存储库上,该脚本执行以下操作git reset --hard

像这样的东西:

$ git push opal
Counting objects: 74, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (45/45), done.
Writing objects: 100% (53/53), 16.68 KiB, done.
Total 53 (delta 20), reused 0 (delta 0)
remote: warning: updating the current branch
remote: HEAD is now at 88f1e35 tweak lavalamp styles

我在这里不明白的是 - 远程表示头现在位于 XXX,但是当我登录服务器时 - 远程工作副本根本没有更新!

任何想法?


问题在于 Git 命令在为钩子脚本创建的环境中与正常环境中的行为方式有所不同。

首先,挂钩脚本运行时将其当前工作目录设置为 Git 目录本身(即.git/非裸存储库的目录)。其次,挂钩脚本使用 GIT_DIR 环境变量集运行并指向 Git 存储库(同样,.git/非裸存储库的目录)。

通常,如果您尝试运行git reset --hard来自.git/目录,它将死亡并显示以下消息:

fatal: This operation must be run in a work tree

但是当设置 GIT_DIR 时,Git 命令假定当前目录是工作树。由于钩子运行时的当前目录是.git/目录,你的git reset --hard实际上是直接将您的工作树文件“签出”到.git/而不是其父目录(即您现在在您的.git/目录)。

希望您的存储库中的版本化内容都没有与以下内容一致的路径名Git 在 Git 存储库本身中使用的路径名 http://www.kernel.org/pub/software/scm/git/docs/gitrepository-layout.html。如果它们确实一致,那么你的git reset --hard将覆盖存储库的一些内部结构,并且您可能希望从其他存储库重新克隆它。如果您确信版本化内容不会与 Git 的内部路径名冲突,那么您可以使用以下命令清理它:

# make a backup of your repository first!
(cd .git && GIT_DIR=$PWD git ls-files -cz | xargs -0 rm)

这只会删除当前跟踪的文件(它将留下已被删除但在损坏的钩子处于活动状态时推送的提示提交中曾经跟踪过的文件)。


一种解决方案是在调用 Git 命令之前将当前工作目录更改为正常工作树并取消设置 GIT_DIR 和 GIT_WORK_TREE。

⋮
test "${PWD%/.git}" != "$PWD" && cd .. 
unset GIT_DIR GIT_WORK_TREE
# you can now safely use Git commands
⋮

另一个解决方案是显式重置 GIT_DIR,在那里设置 GIT_WORK_TREE 和 chdir。 Git 常见问题解答“为什么在“git Push”之后我看不到远程存储库中的更改?” https://git.wiki.kernel.org/index.php/GitFaq#Why_won.27t_I_see_changes_in_the_remote_repo_after_.22git_push.22.3F推荐一个更新后 script http://utsl.gen.nz/git/post-update就是这样做的。链接脚本也更安全,因为如果在进行硬重置之前索引或工作树脏了,它会进行隐藏。

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

在 git Push 上硬重置 的相关文章

随机推荐

  • 指定 Spring @Autowired 的顺序

    我正在使用 Spring 框架 4 我有一个类 比如 ClassA 其中使用了另一个类 比如 ClassB ClassA 的成员变量从 ClassB 获取值 ClassB 有一个静态方法 可以从属性文件中读取数据 ClassB 中的静态成员
  • 为什么TEdit只显示长度等于或小于37440个字符的文本?

    如果你这样做 Edit1 Text StringOfChar X 37440 它将显示文本 但是如果您这样做 Edit1 Text StringOfChar X 37441 文本将不会出现 有人知道为什么吗 如果这是一个错误 除了将所有现有
  • 如何测试为 SKProductsRequest 设置不同的区域设置

    我正在 iPhone 应用程序中实现 IAP 并在沙盒环境中工作 我有我的代码设置要处理SKProducts由返回SKProductsRequest获取定价信息 我想测试检索不同区域设置中的价格值 例如欧元或日元 以测试我的格式化代码 我怎
  • React Native 应用程序的发布版本中的图像映射错误

    我在用着require image xx png 来传递
  • EncdDecd 到 DecodeBase64 有限制吗?

    您可以传入的 Base64 字符串的大小是否有限制 我正在使用以下内容 当创建我的图像时 它缺少底部的一部分 我看到 BufferLen 约为 44000 但 DecodeBase64 返回大约包含 24000 个项目的数组 BufferL
  • maven-failsafe-plugin 错误并构建成功?

    我的问题与此非常相似 maven failsafe plugin 失败并构建成功 https stackoverflow com questions 12279160 maven failsafe plugin failures and b
  • Android Studio:Imageview 背景在比图像更大的最小尺寸上模糊

    在 Android Studio 中 我正在使用 Imageviews 并使用相对较小的图像 10x16px 来获得较大的图像视图 100 像素 就像任何人都会做的那样 我根据需要设置图像视图的最小高度 宽度 Imageview setMi
  • SocketIO Chrome 检查器框架

    我正在使用 Socket IO 在 chrome 检查器中查看帧时遇到了一些问题 每帧内容旁边的数字是什么意思 这就是 Engine io 协议 其中您看到的数字是数据包编码
  • Hibernate 5. 生成 SQL DDL 到文件中

    我尝试使用这个类 Hibernate JPA 在更新 DB 架构之前检查生成的 sql 如 NET EF 迁移 https stackoverflow com questions 30833260 hibernate jpa check g
  • 除了Azure Portal之外,还有查看Application Insights日志的方法吗?

    我无法忍受在 Azure 门户中多次单击来访问 AppInsights 日志分析 将 URL 保存到分析刀片并返回到它也经常无法加载页面 因为似乎存在一些身份验证令牌过期问题 如何在不使用 Azure 门户的情况下在 AppInsights
  • Eslint:无重复解决错误:无法加载解析器“节点”

    我今天刚刚更新了我的项目 带有 VueJS 和 Quasar Framework 的 SPA npm update我现在无法运行它 我收到错误no duplicates Resolve error unable to load resolv
  • Android SKIA 图像解码

    HI 我目前正在研究Android如何解码和图像文件 当我检查代码时 它似乎正在调用 SKIA 库 但是 我如何根据源代码知道android skia支持哪些图像文件格式呢 我不是编程专家 所以我仍在尝试了解C 和Java语言 我现在迷失在
  • MVC_layout页面中脚本放置的位置

    您好 通过阅读本网站上的建议 我了解到脚本应位于 layout 页面的底部 我的问题是我不确定 底部 到底在哪里 有些人说它就在标签之前 但这对我不起作用 我尝试过将脚本放在很多地方 但似乎没有地方起作用 有人可以告诉我我做错了什么吗 这是
  • Decimal 存储 C# 中解析字符串的精度?有什么影响?

    在 IRC 的一次对话中 有人指出了以下几点 decimal Parse 1 0000 ToString 1 0000 decimal Parse 1 00 ToString 1 00 如何 为什么decimal类型像这样保留精度 或者更确
  • 复合主键:好还是坏?

    虽然可以使用复合主键 但是对于下面的情况 这真的是一种不好的做法吗 Stackoverflow 上的共识在这个问题上似乎是双向的 Why 我想将订单付款存储在单独的表中 原因是 一个订单可以有许多项目 这些项目以多对多关系的形式在单独的表中
  • 在 C 中打印 Unicode 符号

    我正在尝试打印 unicode 星号字符 0x2605 http www fileformat info info unicode char 2605 index htm 在使用 C 的 Linux 终端中 我遵循了网站上其他答案建议的语法
  • 如何获取谷歌地图 v2 api 密钥以进行团队合作

    抱歉我的英语不好 我的 google 地图 api v2 密钥有问题 我和我的团队一起工作 我们的项目 android 项目 只需要一个 api 密钥 有可能吗 或者我团队的所有成员都必须生成 api 密钥才能运行 google 地图 您可
  • 无法在 python 中获取当前 url

    我创建了一个类和方法 如下所示 我需要获取当前页面的网址 但在调用 get full path 时出现错误 class A object def get user request current url request get full p
  • python statsmodels:帮助使用 ARIMA 模型进行时间序列

    statsmodels 的 ARIMA 为我的输出提供了不准确的答案 我想知道是否有人可以帮助我理解我的代码有什么问题 这是一个示例 import pandas as pd import numpy as np import datetim
  • 在 git Push 上硬重置

    我有一个接收后挂钩脚本位于我正在推送的远程存储库上 该脚本执行以下操作git reset hard 像这样的东西 git push opal Counting objects 74 done Delta compression using