如何将推送恢复到主服务器,然后从新分支再次推送相同的更改? [英] How to revert a push to master and then push again the same changes from new branch?

查看:18
本文介绍了如何将推送恢复到主服务器,然后从新分支再次推送相同的更改?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不小心推到了master。我通过git revert shaToPreviousState恢复了这个推送,并推回了原始的主状态。然后,checked outSHA提交意外推送的更改,并通过git switch -c new_stuff将这些更改切换到新分支new_stuff。我做了一些小的修改,对分支new_stuff做了updatepushed这些更改。现在,当我创建MR以将new_stuffmaster合并时,只有最新的更改(在创建new_stuff之后)显示为差异。然而,我试图推送的内容包括那些我已经恢复的更改(在签出SHA并创建new_stuff之前)。为什么它们没有显示在差异中,以及如何解决此问题?

当前主机

commit 8573277b289224d93993e374e070fa66da63d309 (HEAD -> master, origin/master, origin/HEAD)
Author: user.me <user.me@gmail.com>
Date:   Mon Sep 14 22:37:39 2020 +0200

    Revert "added loading some bin files"

    This reverts commit 649a6f5f4dc31e6ba363fef7a9f77661f45254e9.

commit 649a6f5f4dc31e6ba363fef7a9f77661f45254e9
Author: user.me <user.me@gmail.com>
Date:   Mon Sep 14 22:34:02 2020 +0200

    added loading some bin files

new_Stuff分支

commit 5ff6b90931685a32ae3e7bcde7b00db7440fac5e (HEAD -> new_stuff, origin/new_stuff)
Author: user.me <user.me@gmail.com>
Date:   Mon Sep 14 22:57:33 2020 +0200

    added a few docstrings

commit 649a6f5f4dc31e6ba363fef7a9f77661f45254e9
Author: user.me <user.me@gmail.com>
Date:   Mon Sep 14 22:34:02 2020 +0200

    added loading some bin files

因此,推送5ff6b9并创建MR后,diff中除了5ff6b9添加的变化外,没有其他变化。所以,我试图理解为什么Git没有看到649a6f+5ff6b9带来了很多新东西,而只是显示了5ff6b9的不同:(

推荐答案

但是,我尝试推送的内容包括那些我已经恢复的更改(在签出ha和创建new_sStuff之前)。为什么它们没有显示在差异中,以及如何解决此问题?

tl;dr您的问题最有可能的答案是,您期望在diff中看到的更改已经是master的一部分,因此它们实际上并不在diff中。您可以从git log的输出中看到这种情况,因为master和new_Stuff都有COMMIT WITH HASH649a6f5f4dc31e6ba363fef7a9f77661f45254e9

您还可以看到MASTER包含另一个COMMIT8573277b289224d93993e374e070fa66da63d309,该COMMIT将恢复您试图删除的更改。第二个提交是在您执行git revert时创建的。它具有与原始提交完全相反的更改。您可以通过运行

来查看
git diff master master~

(master~是指master提交的父级。)

若要将Master恢复到其原始状态,应使用git reset --hard

git checkout master
git reset --hard master~2

此版本将重置master后退2个提交并完全放弃所有更改。如果需要,您可以在更改前使用确切的SHA哈希进行提交,而不是使用master~2

现在您需要强制推送,因为您修改了master的历史:

git push -f

大多数Git服务默认不允许强制推送master,因此您可能会收到推流被拒绝的消息。如果是这种情况,您需要在Git服务器上设置权限以允许强制推送。我建议你做完后再放回去。

成功强制推送主控后,PR diff应准确显示您所期望的内容。

这篇关于如何将推送恢复到主服务器,然后从新分支再次推送相同的更改?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆