gpt4 book ai didi

git - 如何将推送恢复到主分支,然后再次从新分支推送相同的更改?

转载 作者:行者123 更新时间:2023-12-03 08:35:51 26 4
gpt4 key购买 nike

我不小心推送到了master。我通过 git revert shaToPreviousState 恢复了此推送,并将原始主状态推回。然后 checkout sha 提交以及意外推送的更改,并通过git switch -c new_stuff 将这些更改切换到新分支new_stuff。我做了一些小的修改,进行了更新并将这些更改推送到分支new_stuff。现在,当我创建 MR 将 new_stuffmaster merge 时,只有最近的更改(创建 new_stuff 之后)才会显示为差异。但是,我尝试推送的内容包括我已经恢复的那些更改(在检查 sha 并创建 new_stuff 之前)。为什么它们也没有显示在差异中以及如何解决此问题?

现任主人

commit 8573277b289224d93993e374e070fa66da63d309 (HEAD -> master, origin/master, origin/HEAD)
Author: user.me <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d0a5a3b5a2febdb590b7bdb1b9bcfeb3bfbd" rel="noreferrer noopener nofollow">[email protected]</a>>
Date: Mon Sep 14 22:37:39 2020 +0200

Revert "added loading some bin files"

This reverts commit 649a6f5f4dc31e6ba363fef7a9f77661f45254e9.

commit 649a6f5f4dc31e6ba363fef7a9f77661f45254e9
Author: user.me <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0772746275296a6247606a666e6b2964686a" rel="noreferrer noopener nofollow">[email protected]</a>>
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 <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d8adabbdaaf6b5bd98bfb5b9b1b4f6bbb7b5" rel="noreferrer noopener nofollow">[email protected]</a>>
Date: Mon Sep 14 22:57:33 2020 +0200

added a few docstrings

commit 649a6f5f4dc31e6ba363fef7a9f77661f45254e9
Author: user.me <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="90e5e3f5e2befdf5d0f7fdf1f9fcbef3fffd" rel="noreferrer noopener nofollow">[email protected]</a>>
Date: Mon Sep 14 22:34:02 2020 +0200

added loading some bin files

因此,在推送 5ff6b9 并创建 MR 后,除了 5ff6b9 添加的内容之外,diff 中没有任何更改。所以,我试图理解 git 怎么看不到 649a6f + 5ff6b9 带来了很多新东西,但只显示了 5ff6b9 的差异> :(

最佳答案

However, what I am attempting to push includes those very changes I already reverted (before checking out the sha and creating new_stuff). Why are they not displayed in the diff as well and how do I resolve this issue?

TL;DR 您的问题的答案很可能是您期望在 diff 中看到的更改已经是 master 的一部分,因此它们实际上并不是在差异中。您可以从 git log 的输出中看到这种情况,因为 master 和 new_stuff 都有哈希值 649a6f5f4dc31e6ba363fef7a9f77661f45254e9 的提交。

您还可以看到 master 包含另一个提交 8573277b289224d93993e374e070fa66da63d309 ,它会恢复您试图删除的更改。第二次提交是在您执行 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 服务器上设置权限以允许强制推送。我建议您完成后将其恢复。

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

关于git - 如何将推送恢复到主分支,然后再次从新分支推送相同的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63891898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com