git reset --hard 后的冲突问题

4
我有一个名为master的分支,我想要重置这个分支上所有的更改。需要将名为origin/d的分支上的所有提交移动到master分支上。 所以这就是我所做的(在master 分支上):
git fetch -all
git reset --hard origin/d
git clean -f -d
git push origin master --force

我收到了以下信息:
remote: error: denying non-fast-forward refs/heads/master (you should pull first)

但我不想拉,我只想将分支d上的所有提交移动到分支master(忽略分支master上的所有本地/非本地提交)。

当我输入git pull时,会出现许多冲突,我不想解决这些冲突。有人能帮帮我,告诉我最简单的方法是什么吗?


该错误似乎表明服务器不允许您的“--force”参数。您在服务器上运行的是什么?它是自托管的吗? - Scott Weldon
m 分支与 master 分支完全相同,因此这是错误的情况。 - user2921643
你正在运行哪个服务器?你有管理员权限吗? - Scott Weldon
我没有管理员权限。 - user2921643
2个回答

4
错误提示表明 (1) 你的服务器不允许强制更新 (--force 参数),并且 (2) 出于某种原因,Git 想要将 m 推送到 master
为了暂时解决第二个问题,可以执行以下操作:
git push origin m:refs/heads/m --force-with-lease

使用--force-with-lease--force更好,因为前者只会在你的远程跟踪分支是最新的情况下进行覆盖。如果自从上次fetch之后其他人推送了提交,则--force将覆盖这些提交,导致工作丢失。

然而,如果你的服务器不允许强制更新,那么它可能也会拒绝该命令。如果你有管理员权限,则可以选择更改。否则,为了解决这个问题,你应该能够删除该分支然后推送:

git push origin --delete m
git push origin m:refs/heads/m

如果这不起作用,那么您将需要联系您的服务器管理员,并要求他们允许您删除分支和/或强制更新它们。


m 分支就是主分支。当我使用 git pull 命令时,git 会自动合并旧的 m 分支中的某些更改,然后就会出现一些冲突以及一些我不想要的修改文件。是否有可能只将 d 分支中的所有提交(且仅限提交)移动到 m 分支中?如何解决所有冲突并将其标记为我的(来自 d 分支),同时防止在合并后对其他文件进行修改? - user2921643
@user2921643 好的,这解释了第二个问题。请将此额外信息编辑到您的问题中。顺便回答一下我在您的问题评论中提出的问题。 - Scott Weldon
将“m”更改为“master”。 - user2921643

4

你看到这个错误是因为你没有从代码库获取最新的更改,所以你应该执行拉取操作。

git reset --hard HEAD
git pull --rebase // fetch and pull together

并且在解决冲突之后(如果有的话),您就可以进行推送操作。
git push origin master 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接