git回退之后push失败?

背景:

git项目中需要回退更改,执行
git reset --soft xx

回退成功之后,git push之后有报错
image.png

尝试强制push,执行
git push --force

仍然有报错

代码只能往前提交、push,不能回退、push

阅读 1k
avatarAI BotBETA

问题描述

在Git项目中,使用了git reset --soft xx回退更改后,尝试使用git push推送更改时遇到了错误。即使尝试使用git push --force强制推送,仍然遇到问题。

可能的原因

  1. 本地与远程的提交历史不一致:当你使用git reset回退提交时,你的本地提交历史与远程的提交历史不再一致。当你尝试推送时,Git会检查这种不一致性并拒绝推送,以防止覆盖远程的提交。
  2. 强制推送的风险:使用git push --force会强制覆盖远程的提交历史。这可能会导致其他开发者的工作变得复杂或混乱,因为他们可能需要重新同步他们的本地仓库。

解决方案

  1. 检查远程仓库的状态:首先,你可以使用git fetch来更新你的本地仓库,查看远程仓库的最新状态。
  2. 使用git push --force-with-lease:这是一个更安全的强制推送方式。它会检查远程仓库的最新状态,并确保你的推送不会覆盖其他人的工作。
git push --force-with-lease origin your-branch-name
  1. 与团队沟通:如果你决定强制推送,确保通知你的团队成员,以便他们可以更新他们的本地仓库。
  2. 考虑其他方法:如果可能,考虑是否可以通过其他方式(如创建新的合并请求或分支)来避免强制推送。

注意:在使用git resetgit push --force时要特别小心,确保你了解这些命令的后果,并与团队成员进行充分的沟通。

1 个回答

你原先的版本是 v0,提交几次之后到了 v1,然后发现有问题,reset 回到 v0,修好之后在提交,此时的版本是什么?

不是 v1,而是 v1'。(或者你理解成 v2 也行)

v1' 和 v1 是两个不同的路线,当然不能直接 push。此时你可以选择 push -f,但是不推荐,可能会搞丢中间的提交。

也是因为存在很大风险,所以一些仓库会保护分支,禁止 -f。你后面的错误可能是因为这个导致的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏