如何将推送恢复到主服务器,然后从新分支再次推送相同的更改? [英] How to revert a push to master and then push again the same changes from new branch?
问题描述
我不小心推到了master
。我通过git revert shaToPreviousState
恢复了这个推送,并推回了原始的主状态。然后,checked out
SHA提交意外推送的更改,并通过git switch -c new_stuff
将这些更改切换到新分支new_stuff
。我做了一些小的修改,对分支new_stuff
做了update
和pushed
这些更改。现在,当我创建MR以将new_stuff
与master
合并时,只有最新的更改(在创建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
。
8573277b289224d93993e374e070fa66da63d309
,该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屋!