我已经建立了一个远程的非裸露的“主”仓库,并将其克隆到我的计算机上。 我进行了一些本地更改,更新了本地存储库,然后将更改推回到远程仓库中。 到那时为止一切都很好。

现在,我不得不更改远程仓库中的某些内容。 然后,我更改了本地存储区中的某些内容。 我意识到不需要更改远程仓库。 所以我尝试将本地存储库中的git push送到远程存储库中,但是出现类似以下错误:

为了防止丢失历史记录,拒绝了非快进更新,请在合并之前合并远程更改。 有关详细信息,请参见git push --help的“关于快进的说明”部分。

我以为可能

git push --force

会强制我的本地副本将更改推送到远程副本,并使其相同。 它确实强制执行更新 ,但是当我返回到远程存储库并进行提交时,我注意到文件包含了过时的更改(主要远程存储库以前具有的更改)。

正如我在对答案之一的评论中提到的 :

[我]尝试强制执行,但是当回到主服务器以保存更改时,我得到了过时的暂存。 因此,当我提交存储库时,它们是不一样的。 当我再次尝试使用git push时,出现相同的错误。

如何解决此问题?


#1楼

做就是了:

git push origin <your_branch_name> --force

或者,如果您有特定的仓库:

git push https://git.... --force

这将删除您以前的提交并推送您当前的提交。

可能不合适,但是如果有人偶然发现此页面,以为他们可能想要一个简单的解决方案...

短旗

另请注意, -f--force缩写,因此

git push origin <your_branch_name> -f

也可以。


#2楼

如果push --force不起作用,您可以执行push --delete 。 查看此实例的第二行:

git reset --hard HEAD~3  # reset current branch to 3 commits ago
git push origin master --delete  # do a very very bad bad thing
git push origin master  # regular push

但是要当心...

永远不要回到公开的git历史上!

换一种说法:

  • 永远不要force推动公共存储库。
  • 请勿执行此操作或执行任何可能破坏某人pull
  • 永远不要在可能已经拉过的仓库中 resetrewrite历史记录。

当然,即使有此规则,也有非常罕见的例外,但是在大多数情况下,不需要这样做,它将给其他所有人带来麻烦。

请还原。

始终谨慎对待您要公开回购的内容 。 还原:

git revert -n HEAD~3..HEAD  # prepare a new commit reverting last 3 commits
git commit -m "sorry - revert last 3 commits because I was not careful"
git push origin master  # regular push

实际上, 两个原始HEAD(来自revert和来自邪恶的reset )都将包含相同的文件。


编辑以在push --force周围添加更新的信息和更多参数

考虑使用租约推力而不是推力,但仍希望还原

push --force可能带来的另一个问题是,有人在您执行任何操作之前但在您已取回操作之前进行了任何操作。 如果您现在强制您重新设置版本,则您将替换其他人的工作

git push --force-with-lease 1.8.5中引入的git push --force-with-lease ( 感谢@VonC对问题的评论)试图解决此特定问题。 基本上,如果自从最近一次获取以来修改了遥控器,它将带来一个错误并且不会推送。

如果您确实确定需要push --force这很好,但是仍然希望防止出现更多问题。 我要说的应该是默认的push --force行为。 但这仍然不是强迫push的借口。 在您恢复 基准之前拿到钱的人仍然会遇到很多麻烦,如果您转而恢复 ,则可以轻松避免。

由于我们在谈论git --push实例...

为什么有人要强迫推?

@linquize在评论中带来了一个很好的推动力示例: 敏感数据 。 您错误地泄漏了不应推送的数据。 如果你足够快,你可以“修复” *通过强制在上面推它。

*除非您也进行垃圾收集或以某种方式清除它 ,否则数据仍将位于远程上 。 它也很可能被已经拿来的其他人传播,但是您明白了。


#3楼

如果我在本地分支A上,并且要强制将本地分支B推到原始分支CI,则可以使用以下语法:

git push --force origin B:C

#4楼

这是我们在维护历史记录的同时替换公司gitHub存储库上的master的解决方案。

经常禁用push -f来掌握公司存储库,以维护分支机构的历史记录。 该解决方案为我们工作。

git fetch desiredOrigin
git checkout -b master desiredOrigin/master // get origin master

git checkout currentBranch  // move to target branch
git merge -s ours master  // merge using ours over master
// vim will open for the commit message
git checkout master  // move to master
git merge currentBranch  // merge resolved changes into master

将您的分支推到desiredOrigin并创建PR


#5楼

使用以下命令:

git push -f origin master

#6楼

首先,我不会直接在“主”存储库中进行任何更改。 如果您真的想拥有一个“主”仓库,那么您应该只推送它,而不要直接更改它。

关于您遇到的错误,您是否尝试git pull本地存储库进行git pull ,然后将git push到主存储库? 您当前正在执行的操作(如果我理解得很好)是强制执行该操作,然后丢失“主”存储库中的更改。 您应该首先在本地合并更改。


#7楼

我真的建议您:

  • 只推送到主仓库

  • 确保主存储库是裸存储库 ,以免主存储库工作树与其.git库不同步。 请参阅“ 如何将本地git存储库推送到另一台计算机? ”

  • 如果您确实必须在主(裸机)存储库中进行修改,请克隆它(在主服务器上),进行修改然后将其回推

换句话说,请确保从主服务器和本地计算机都可以访问裸仓库,以使单个上游仓库可以从中/从中进行拉取/拉取。


#8楼

我有同样的问题,但终于明白了。 您最可能需要做的是运行以下两个git命令(用git commit修订号替换哈希):

git checkout <hash>
git push -f HEAD:master

如何正确强制执行Git推送?相关推荐

  1. git推送项目到码云(gitee)

    git推送项目到码云(gitee) git推送项目到码云(gitee) 创建账号 创建一个Gitee账号,我使用的是Gitee因为国内速度快~ 本地安装Git 前往 Git 根据操作系统下载Git到本 ...

  2. Git推送错误: failed to push some refs to ‘git@gitee.com:XXXXXX’

    项目推送时遇Git推送错误: error: failed to push some refs to 'git@gitee.com:name/project.git' 1.分析: 这个问题的产生是因为远 ...

  3. 【git】git拉取,git推送,git查看,git切换操作命令合集

    文章目录 git拉取 本地连接git账户仓库 本地拉取远程分支代码 git推送 提交代码到远程分支 git查看 查看当前在哪个分支上 查看远程分支 查看所有分支 查看文件在工作区的改动状态 查看文件内 ...

  4. linux git 推送空文件夹

    /********************************************************************************** linux git 推送空文件夹 ...

  5. git 推送出现 “fatal: The remote end hung up unexpectedly“ 解决方案

    在使用git推送项目时候出现 "fatal: The remote end hung up unexpectedly " 原因是推送的文件太大. 解决方案: 在克隆/创建版本库生成 ...

  6. 功能分支重新设置后,Git推送被拒绝

    好的,我以为这是一个简单的git场景,我缺少什么? 我有一个master分支和一个feature分支. 我在master上做一些工作,在feature上做一些,然后再在master上做更多的工作. 我 ...

  7. git推送密码_保护代码完整性(六):在 Git 上使用 PGP

    我们继续我们的 PGP 实践系列,来看看签名标签的标签和提交,这可以帮你确保你的仓库没有被篡改. 在本系列教程中,我们提供了一个使用 PGP 的实用指南,包括基本概念和工具.生成和保护你的密钥.如果你 ...

  8. 使用git推送代码到开源中国以及IDEA环境下使用git

    2019独角兽企业重金招聘Python工程师标准>>> 在学习Java的过程中我们会使用到git这个工具来将我们本周所编写的代码上传到开源中国进行代码托管,而在使用git的时候有很多 ...

  9. git推送代码详细教程

    前言: 在写这篇文章之前,其实我已经写过一次教程:git码云的一次配置全记录,但是当时写那个教程的时候,对于git的使用还是懵懵懂懂的,如果是新手完全照着做可能会出现一些意想不到的问题,所以在经历N次 ...

最新文章

  1. 技术图文:如何利用C#实现Huffman编码?
  2. python画圆简单代码-python实现画圆功能
  3. 利用GAN实现QR Code超分辨率的研究
  4. mysql慢查询面试题_头条Java岗3面入职:事务+慢查询SQL+Redis+秒杀设计面试题等
  5. 素数 [2008年北京航空航天大学计算机研究生机试真题]
  6. linux下定时网站文件备份和数据备份以及删除旧备份标准代码
  7. 处女的第一次不一定会流血!很感人 我都流泪了!
  8. scratch安装包|scratch最新版安装包|scratch3安装包|scratch3最新版安装包
  9. 自动驾驶决策规划研究综述
  10. TiDB Data Migration (DM)介绍
  11. 在vue里使用codemirror
  12. 构建 GPRS 网络(转)
  13. 如何解决移动硬盘/U盘无法打开并在电脑上显示为“本地磁盘”的问题
  14. ibm tivoli_在Tivoli Access Manager环境中管理TDS 6.0代理服务器并进行故障排除
  15. MFC中得到2个SYSTEMTIME时间差的函数
  16. 爱企查青龙可跑 一个月一张爱奇艺月卡最细教程
  17. MAC Book Pro 使用 libmodbus
  18. vue中如何使用富文本编辑器(TinyMce)
  19. K8s——kubernetes集群中ceph集群使用【上】
  20. java 众数 中位数_中位数和众数

热门文章

  1. ViewPager中Fragment的生命周期和FragmentPageAdapter与FragmentStatePageAdapter对其的影响
  2. Android 自定义控件开发入门(一)
  3. android studio gradle版本太低问题解决方案
  4. python中绝对路径的区别,理解Python中的绝对路径和相对路径
  5. 人工智能实践:TensorFlow笔记学习(四)—— 神经网络优化
  6. Swift URL含有中文的处理
  7. c++数据结构中 顺序队列的队首队尾_数据结构 3.3 顺序队
  8. python使用gevent实现协程
  9. Dubbo下载-从missing artifactId说起
  10. Python应用——自定义函数:分割PDF文件函数