强制“git推送”覆盖远程文件

强制“git推送”覆盖远程文件,git,git-push,Git,Git Push,我想推送本地文件,并将它们放在远程repo上,而不必处理合并冲突。我只希望我的本地版本比远程版本优先 如何使用Git实现这一点?您应该能够使用 git push -f <remote> <branch> 但后来开发分支被一个重基击中,这将导致我在运行git pull时收到一个类似这样的错误: 使用git pull-force可能看起来很诱人,但要小心,因为这会让您陷入束手无策的提交: D----E topic A----B----C' develo

我想推送本地文件,并将它们放在远程repo上,而不必处理合并冲突。我只希望我的本地版本比远程版本优先


如何使用Git实现这一点?

您应该能够使用

git push -f <remote> <branch>
但后来开发分支被一个重基击中,这将导致我在运行git pull时收到一个类似这样的错误:

使用git pull-force可能看起来很诱人,但要小心,因为这会让您陷入束手无策的提交:

D----E topic A----B----C' development 更新3:您还可以使用-force with lease选项作为更安全的部队 推

使用租约强制推送允许强制推送在出现以下情况时失败: 远程服务器上的新提交是否是您在技术上没有预料到的,如果 您还没有将它们提取到远程跟踪分支中,这 如果您不想意外地覆盖其他人的 你甚至还不知道,你只是想 覆盖您自己的:

git push <remote> <branch> --force-with-lease
git push <remote> <branch> --force-with-lease
您可以了解有关如何使用-force和lease by的更多详细信息 阅读以下任何一项:


另一种避免强制推送的方法是:

将新提交放在专用分支中 在原点/主屏幕上重置主屏幕 将您的专用分支合并到主分支,始终保持来自专用分支的提交,这意味着在主分支上创建新的修订,这将镜像您的专用分支。 有关模拟git合并的策略,请参见-strategy=theres。 这样,您就可以将master按到remote,而无需强制任何操作。

您想强制按吗 您基本上想要做的是强制推送本地分支,以便覆盖远程分支

如果您想更详细地解释以下每个命令,请参阅下面的“我的详细信息”部分。基本上,您有4种不同的Git强制推送选项:

git-push-f git推送原始主机-示例 git-push-f git推送源代码-f示例 git-push-f git带租约的push-force 如果您想对每个命令进行更详细的解释,请参阅下面的“我的详细答案”部分

警告:强制推送将用正在推送的分支的状态覆盖远程分支。在使用它之前,请确保这是您真正想要做的,否则您可能会覆盖您实际想要保留的提交

强制推送细节 指定远程和分支 您可以完全指定特定的分支和远程分支。-f标志是-force的简短版本

从Git2.0开始,默认设置simple基本上只会将当前分支推送到其上游远程计数器部分。远程由分支的branch..remote设置确定,否则默认为原始repo

在Git版本2.0之前,默认设置matching基本上只是将所有本地分支推送到远程上具有相同名称的分支,而远程分支的默认名称是origin

通过阅读git help config或,您可以阅读更多push.default设置

使用租约强制推送更安全 使用租约强制推送允许强制推送失败,如果远程上有您在技术上没有预料到的新提交,如果您还没有将其提取到远程跟踪分支,这对于您不想意外覆盖您甚至还不知道的其他人的提交非常有用,您只想覆盖您自己的:

git push <remote> <branch> --force-with-lease
git push <remote> <branch> --force-with-lease
通过阅读以下任一内容,您可以了解有关如何使用-force with lease的更多详细信息:


git push-f有点破坏性,因为它重置了团队中其他人所做的任何远程更改。更安全的选择是{git push-force with lease}

{force with lease}所做的是拒绝更新分支,除非它是我们期望的状态;i、 e.没有人更新上游分支。在实践中,这是通过检查上游ref是否符合我们的期望来实现的,因为ref是散列,并且隐式地将父链编码到它们的值中。 您可以确切地告诉{force with lease}要检查什么,但是默认情况下会检查当前的远程引用。实际上,这意味着当Alice更新她的分支并将其推送到远程存储库时,分支的引用头将被更新。现在,除非Bob从远程执行拉操作,否则他对远程的本地引用将过时。当他使用{force with lease}进行推送时,git将根据新的远程设备检查本地ref并拒绝强制推送。{-force with lease}有效地只允许在没有其他人将更改推送到远程的情况下强制推送。系好安全带的时候是{force}。

对我有用:

git push --set-upstream origin master -f
使用龟甲的简单步骤

GIT提交本地文件并将其推入GIT存储库

步骤:

1隐藏变化 斯塔斯 h名称

2拉

3隐藏流行音乐

4承诺 1个或多个文件,并提供提交更改说明集作者和日期


5 push

git push origin-force是否对您无效?如果您只想覆盖.git文件或相关的工作副本,则不清楚是否可能存在副本。如果是git存储库,git push就是答案。如果要更新远程工作副本,必须使用post接收hook@Mike因为某种原因,这对我很有用。。。想知道OPA出了什么问题可能的原因是,强制推送不起作用,它可能在远程回购上被显式禁用,以确保不会因愚蠢和/或恶意贡献者而遭受损失:使用config receive.denynonfastforts进行查找。你是对的,但这真的应该只在特殊情况下使用。@ScottBerrevotes我更喜欢推送我拥有的,让它远程覆盖,而不是集成。我给OP的正是他想要的。我知道,但OP可能没有意识到这样做的后果。你从技术上回答了这个问题,但我认为警告你不要这样做并不恰当。@Scottberrevotes我正试图让一位主持人将我的答案合并到规范中,因为我提到了“新力量租赁”选项;仅供参考:由于这是选定的答案,因此我将在此处发表评论。独自工作时使用武力不是问题。例如,我的云主机从它自己的git开始。如果我在本地工作并构建一个项目,并且我想把它放在我的云主机OpenShift上,那么我有两个独立的git项目。我的本地和我的OpenShift。我得到了我喜欢的本地版本,但现在想在我的OpenShift上预览它。然后第一次使用-f标志按下OpenShift。基本上是将本地git放在OpenShift上。只要你想推到的远程分支是你最近推到的分支,你也可以做git push-f。结果与push-force有何不同?@alexkovelsky任何强制推都会重写历史,强制回购的其他用户重置自己的本地回购以匹配新推送的提交。这种方法只会创建新的提交,不需要强制推送。我建议您在回答中添加一个标题:您不想强制推送:@alexkovelsky很好。我已相应地编辑了答案。
git push <remote> <branch> --force
git push <remote> <branch> -f
git push <remote> --force
git push --force
git push <remote> <branch> --force-with-lease
git push --set-upstream origin master -f