git push --force,在幕后

2023-12-06

当你使用 --force 进行 git push 时到底会发生什么?

我已经在网上搜索了大约一个小时,我能找到的最相关的答案是:

Same as [git push], but force the push even if it results in a non-fast-forward merge. Do not use the --force flag unless you’re absolutely sure you know what you’re doing.

- 来源自https://www.atlassian.com/git/tutorial/remote-repositories#!push

我想我对此非常理解,但对我来说这就像说git push --force将强制推动。尽管我进行了搜索,但我找不到任何真正具体的内容来概述强制推送所涉及的过程。

假设,我设置了一个名为[电子邮件受保护]:my-app.git,以及在 Heroku 上设置的用于暂存的该存储库的镜像,名为[电子邮件受保护]:my-app-staging.git。

我创建了一个名为“new_changes”的本地分支,完成了工作,并从该分支推送到暂存。

我不喜欢这个结果,所以我放弃了这个项目,建立了一个名为“more_new_changes”的新分支,做了一些工作,在本地测试了它,与master合并,并尝试推送到staging,只是为了确保staging已经启动-迄今为止。

我的推动告诉我...

Pushing to [email protected]:my-app-staging.git
Fetching repository, done.
To [email protected]:my-app-staging.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to '[email protected]:my-app-staging.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

我不想将暂存的代码合并到我的本地主分支中 - 事实上,我希望暂存代码消失。 (显然,分支将以散列为标题,但为了论证)我认为如果我的分期看起来像

push079->push080->new_changes(HEAD)

我的本地看起来像

push079->push080->more_new_changes(HEAD)

我决定使用 --force 推送到暂存,然后结果将是一个看起来像的暂存分支

push079->push080->more_new_changes(HEAD)

或者它可能看起来更像

push079->push080->new_changes
\
>more_new_changes(HEAD)

但如果我错了,它只会把两者压在一起,我最终会得到类似的东西

push079->push080->new_changes->more_new_changes(HEAD)

然后我就失去了镜像反映我的生产仓库的暂存仓库的连续性。

那么,当您使用 --force 进行推送时,幕后实际发生了什么?


这非常简单:Git 客户端发送一条消息,相当于“使 ref 指向此提交”。服务器和客户端交换信息,直到服务器获得所需的提交及其历史记录。然后服务器更新引用,即将 SHA1 写入文本文件。

在您的情况下发生的情况是服务器拒绝强制推送,因为它不想丢失任何历史记录。

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

git push --force,在幕后 的相关文章

  • 如何使用 libgit2 创建空提交?

    我一直在寻找libgit2 C API 参考 https libgit2 org libgit2 但我不知道如何模仿git commit allow empty libgit2 是否有内置方法来创建空提交 如果没有 git 如何在底层创建一
  • 将 svn 存储库添加到现有的 git 存储库中?

    我知道你可以使用 git svn init 来跟踪 svn 存储库 但这是为了你想创建一个全新的存储库 我的情况是 我目前已经有一个现有的 git 存储库 并且希望通过将 svn 存储库设为我当前 git 存储库中的远程分支来跟踪 svn
  • 有关多个远程存储库的 Git 状态

    我有一个脚本 如果我忘记在 40 多个存储库中提交或推送一些代码 它会通过电子邮件向我发送提醒 在我的两个项目中 我遵循了这些帖子中的答案 其中我设置了 git push 来推送到多个存储库 从多个远程位置拉 推 https stackov
  • 如何使用 git hook pre-merge-commit 获取原始合并分支名称

    我正在尝试使用新的 git hook pre merge commit 创建一个特定的脚本 但它没有参数 有什么解决方法可以让我获得正在合并的分支的名称吗 例子 在分支 myBranch 上 我调用 git merge testingBra
  • 主存储库和本地存储库在同一台机器上

    我是 Git 新手 我已经在 Linux 服务器中创建了一个主存储库 同一个服务器将由 5 组 每组 3 个用户 使用 我想为每个组创建一个本地存储库 小组成员又应该为每个人创建一个本地存储库 使用内容并将修改提交到小组的本地存储库 我该怎
  • Git refs/remotes/origin/master 没有指向有效的对象

    在上次合并到 Git 存储库的 master 分支后 我失去了克隆存储库的能力 Cloning into test repository remote Counting objects 126084 done remote Compress
  • 使用 Subversion 进行部分提交

    鉴于我做的案例两个独立的变化 in one文件 例如 添加了一个新方法并更改了另一个方法 我经常不想提交这两项更改 因为one提交 但作为two独立承诺 在 git 存储库上我会使用互动模式 of git 添加 1 http linux d
  • Eventmachine start_tcp_server 无接受器 - 端口正在使用或需要 root 权限(运行时错误)

    我已经 3 天无法运行本地服务器了 重新启动我的计算机没有帮助 有几次 在反复尝试大约 40 50 次之后 它随机地起作用了 我不明白为什么 我尝试过一次不同的端口并且有效 但从那以后 没有端口有效 每次我尝试运行我的 Rails 服务器时
  • hg 或 git 中的两个完整目录/项目之间存在差异?

    我继承了一个最初存储在 CVS 中的项目以及所有修订 我做了相当多的编辑 并且我试图比较我在原始目录中所做的所有更改 关于添加的新文件与旧文件 hg git 是否有某种实用程序可以让我进行树差异或类似性质的操作 也就是说 新添加的文件 删除
  • 如何使用 sourceTree 进行推送?

    我正在使用 sourceTree 管理 Unity 项目 版本 4 6 3 我只是想返回到上一次提交 右键选择 将当前分支重置到此提交 在使用模式中选择 硬 然后放回上一次提交 之后 我尝试去推 但没有成功 抱歉 当时我忘记了错误 之后 我
  • 如何将普通的 Git 存储库转换为裸存储库?

    如何将 普通 Git 存储库转换为裸存储库 主要区别似乎是 在普通的 Git 存储库中 你有一个 git存储库内的文件夹 包含构成工作副本的所有相关数据和所有其他文件 在裸露的 Git 存储库中 没有工作副本和文件夹 我们称之为repo g
  • Github 操作测试之前是否进行了包含特定单词的提交

    我需要确保使用 github 操作进行测试 如果之前已进行包含该单词的提交build 如果提交不包含单词build那么不应运行 github 操作的测试 你能给我一些建议吗 Test name Testing on push branche
  • 如何使用 ClearCase 执行递归结帐?

    我想查看指定文件夹的所有子目录中的所有文件 使用 GUI 来执行此操作很痛苦 因为没有递归结帐选项 请注意 ClearCase 以文件为中心 而不是以存储库为中心 如 SVN 或 CVS 这意味着签出所有文件很少是一个好的解决方案 并且使用
  • git checkout 到分支需要很长时间

    我使用的是 Ubuntu 17 10 并且使用 git 版本 2 14 1 每当我从 master 创建一个分支并尝试签出它 或从它签出到 master 时 都会花费大量时间 大约几分钟 有时接近 10 分钟 确实 我有几 GB 的数据 但
  • TeamCity 将功能分支推送到主分支

    有没有办法将成功构建的功能分支推送到另一个分支 我想要这样的东西 Git 存储库 Gitorious GitHub 等 分支机构 master 当前项目的代码 质量保证 代码等待 QA 的分支 功能分支 许多远程分支 开发人员可以在其中开发
  • 如何在Windows上分离“Git bash”中启动的“git gui”?

    例如 我开始 git bash 我导航到某个目录 I start git gui 我关闭控制台窗口或按 Ctrl C Git gui 的窗口消失了 即使我用过git gui disown 即使当我按 Ctrl C 时它不在前台 如何正确分离
  • 从 github 中删除子项目提交

    我有两个存储库A and B 我错误地在我的机器上将仓库 B 克隆到了 A 内 我从存储库 B 中删除了所有代码 但是当我在源上从 A 推送并合并代码时 它还显示了子项目提交B在 Github 仓库上 我想从我的 master 上删除子项目
  • 如何升级 Windows 中 git svn 使用的 SVN 版本?

    我的公司正在将SVN升级到1 7 检查git svn version显示正在使用的SVN版本是1 4 6 我想获得 git svn 使用的 SVN 版本接近 1 7 但是 我没有看到有关更新 git svn 使用的 SVN 版本 在 Win
  • 致命:无法将 HEAD 解析为有效引用

    我正进入 状态fatal Failed to resolve HEAD as a valid ref 每当我尝试承诺时 我努力了 echo ref refs heads master gt git HEAD 但它不起作用 也尝试过 git
  • 如何将 GIT 调用的输出获取到批处理脚本中的变量中?

    我有一个 git 命令来获取当前存储库的最新 SHA 如下所示 git log pretty format H n 1 我有一个 Windows 批处理脚本 我想按如下方式使用它 SET CURRENT SHA 但我不知道如何将从 git

随机推荐

  • 如何在 PHP 中将 number_format 的输出转换回数字?

    PHP无法识别1 200 00 由生成number format 但只有1200 00 这个问题的一般解决方案是什么 您可以删除任何不是数字或小数点的字符并使用floatval number 1200 00 parsed floatval
  • Grunt 任务:删除 HTML 文件中标记之间的行

    在开发中 我们测试未缩小的 css 文件 在构建时我们压缩并组合它们 我想然后删除未压缩的CSSlink前两个注释之间的元素 并取消注释link到生成的combined min css文件 有任何想法吗 Thanks 您没有提及您是如何进行
  • NSURLSession 的简历数据无效

    I use NSURLSessionConfiguration defaultSessionConfiguration 配置我的 url 会话 我通过调用暂停任务cancelByProducingResumeData 产生恢复数据 并将其保
  • 在 PHP 中将语言环境设置为 fr-FR 和数字格式

    我正在尝试创建我的网站之一的法语版本 我已经设定setlocale LC ALL fr FR 在我的页面顶部 并使用strftime我以法国风格正确显示日期 但是我在使用数字时遇到了一些问题 该页面的一部分使用我从 Web 服务获取的数据
  • 将 4 个原始字节转换为 32 位浮点数

    我正在尝试从 eeprom 重新构造 32 位浮点值 eeprom 存储器 0 4 中的 4 个字节是 B4 A2 91 4D PC VS Studio 将其正确重建为 3 054199 10 8 我知道应该在那里的浮点值 现在我正在移动这
  • 如何对 simplexml_load_file 进行错误检查?

    我正在使用 Tumbrl API 将一些帖子加载到我的主页上 我有以下电话 xml simplexml load file request url 有时它加载得很好 但有时我会得到以下输出 Warning simplexml load fi
  • hbase 和 hive 有什么区别? (Hadoop)

    根据我的理解 Hbase是Hadoop数据库 Hive是数据仓库 Hive 允许创建表并在其中存储数据 您还可以将现有的 HBase 表映射到 Hive 并对其进行操作 如果 hive 能做到这一切 为什么我们应该使用 hbase 我们可以
  • 尝试将第三个项目添加到过滤器时,“参数数据类型 ntext 对于上层函数的参数 1 无效”

    我一直在关注 ASP NET 网站上的 Contoso 大学教程 我正在尝试扩展我的技能 因此决定尝试向过滤器添加第三个选项 该教程提供 if String IsNullOrEmpty searchString students stude
  • 在 PHP 中用换行符替换文字字符串 \r\n 时出现问题

    我有一个包含文字字符串的文本文件 r n在里面 我想用实际的换行符 n 替换它 我知道正则表达式 r n 应该匹配它 我已经在Reggy 但我无法让它在 PHP 中工作 我尝试过以下变体 preg replace r n n line pr
  • 将参数传递给 boost::thread 没有重载函数需要 2 个参数

    从 boost thread 文档看来 我可以通过这样做将参数传递给线程函数 boost thread myThread new boost thread callbackFunc param 然而 当我这样做时 编译器抱怨说 没有重载函数
  • preg_match() 未知修饰符 '[' 帮助

    我有这个正则表达式来获取 YouTube 视频 ID lt v a zA Z0 9 lt 0 9 n lt v n 我从那里得到它 正则表达式解析 youtube yid 问题是我得到preg match Unknown modifier
  • OrientDB ETL 加载 CSV,其中顶点在一个文件中,边在另一个文件中

    我有一些数据位于 2 个 CSV 文件中 一个包含顶点 另一个文件包含另一个文件中的边 我正在研究如何使用 ETL 来设置它 已经接近但还没有完全实现 它基本上可以工作 但我的边缘有属性 我不确定它们是否正确加载 这个问题很有帮助 但我仍然
  • CorePlot MonoMac 绑定崩溃

    我正在尝试使用 Monomac 的 CorePlot 0 9 绑定 但这似乎是一项艰巨的任务 monotouch 示例的构建和运行没有任何问题 但我不需要那个 由于绑定中仅存在 CorePlotiOS dll 因此我必须自己为 osx 构建
  • 在 asp.net 中获取 BIOS 日期

    我检查管理员是否有许可证 所以我每月检查一次登录 现在我使用系统日期进行检查 但管理员更改系统日期 所以我想要日期 BIOS 日期 string crt val crt mont crt year dt v objdata select u
  • Powershell - 等待输入 10 秒 [重复]

    这个问题在这里已经有答案了 inputYN Read Host defaults to y in 10 sec y n 如果用户在 10 秒内没有提供任何输入 则默认 inputYN应转到 是 并继续执行下一个任务 你的问题引起了我的兴趣
  • java swing JTextField 设置 PlaceHolder [重复]

    这个问题在这里已经有答案了 我创建了一个 JTextField 现在我想在该 JTextField 上设置占位符 但我不知道如何 请帮忙 这是我的代码 JTextField database new JTextField Enter Dat
  • 使用 PyAudio 进行流式传输时修改音量

    我正在尝试流式传输 WAV 文件 同时剥离其中一个声道 因此它仅在一个扬声器上播放 同时降低音量 我使用 PyAudio 的原因是我必须能够 一次传输多个文件 从特定扬声器 左 右 播放声音 中断声音文件的播放 并且无法找到任何其他允许这些
  • Visual Studio 2015 社区中缺少通用应用程序模板

    我仍然无法在已安装的 Visual Studio 2015 Community 中创建新的通用应用程序 我认为原因是我运行的是 Windows 8 1 今天我升级到Windows 10 但没有可用的 通用应用程序 模板 我已经安装了 Win
  • 使用 Grails 在电子邮件中发送图像

    我正在使用 Grails邮件插件发送电子邮件 我想在电子邮件正文中发送图像 而不是作为附件 我想要的是图像显示在电子邮件正文本身中 就像在新闻通讯中一样 我试过 img style display block height 100px wi
  • git push --force,在幕后

    当你使用 force 进行 git push 时到底会发生什么 我已经在网上搜索了大约一个小时 我能找到的最相关的答案是 Same as git push but force the push even if it results in a