提问人:Igor 提问时间:6/1/2023 最后编辑:Igor 更新时间:6/2/2023 访问量:57
删除 GitHub 中分支上的远程提交
Remove remote commits on the branch in GitHub
问:
都
很久以前,我在我的 fork 中做了一个本地分支,并对其进行了一些更改。然后我提交了一个 PR,该 PR 通过了 CI 构建。
现在,一段时间后,我回到了我生成 PR 的同一台机器上,但由于某种原因,我没有检查我在哪个分支上,并在旧分支上进行了几次提交并推送它们,因此搞砸了 PR(由于缺少测试代码,它尚未合并)。
现在我想做的是转到 Github Web 界面,删除这些提交,但将它们保留在本地,因为我可以在本地计算机上生成一个补丁,删除这些提交,切换到新分支并将补丁应用于它。
或者甚至有更好的解决方案?
那么我该如何解决这个烂摊子呢?
请记住 - 我打算通过测试完成 PR,但这是 2 件完全不相关的事情。
TIA!!
编辑:
一切都很好,我在原始笔记本电脑上的旧分支恢复正常,PR 现在很好。
但是,为了进行单元测试,我不得不去另一台机器上做一个.由于某种未知原因,在那之后,该机器上的 git 树被所有内容堵塞,包括错误的提交。git pull
我能够撤销错误的提交,但我担心当我尝试在所有平台/不同的笔记本电脑上测试我的单元测试时也会发生同样的情况,这意味着我的更改将丢失,我将需要在所有不同的机器上为 UT 再次重做它们。git reset --hard N
你能在这里帮我吗?
TIA!!
答:
经过一番思考,我最初的答案比绝对必要的要复杂得多,但我会把它留在下面。
让原始分支恢复到旧状态并保留新提交的最简单方法是创建一个新分支,然后重置旧分支并强制推送。它看起来像这样:
git checkout old-branch
git branch new-branch
git reset --hard <hash of commit you want to keep in old-branch>
git push -f
或者,您可以使用
git reset --hard HEAD~n
其中是要从旧分支中删除的提交数。n
现在,您可以对新分支执行任何操作,例如将其变基到 .这可能并非完全必要。例如,如果您的 PR 被合并,则在进行第二个 PR 之前,您仍然需要将这些更改拉入新分支。但是,如果您想在合并第 1 个 PR 之前进行第 2 个 PR,那么最好将它们分开,直到其中一个合并。main
顶级域名
修复远程存储库的最简单方法是首先在本地进行更改,然后推送(可能强制推送)到 GitHub 或其他远程存储库。
详
您可以先在本地完成所有操作,然后推送到 GitHub 以修复 PR。首先,您应该创建一个新分支,以及要保留但从另一个分支中删除的提交。git cherry-pick
首先获取所需提交的哈希值:
git checkout old-branch
git log --oneline --graph
复制要移动的提交的提交哈希值。然后做
git checkout -b new-branch main
对于您复制的每个哈希值:
git cherry-pick <hash>
或者,您可以使用 更轻松地执行此操作。你只需要你要保留的最旧提交的哈希值:git rebase
git checkout -b new-branch old-branch
git rebase --onto main <hash of oldest commit>~
现在回到你的旧分支,删除所有你不再需要的提交:
git checkout old-branch
git reset --hard <hash of the first commit you want to keep on this branch>
最后用力推:
git push -f
如果对命令使用了正确的哈希值,则会自动将 PR 更新回其原始状态。git reset
评论
git checkout -b
git checkout master
git checkout -b <branch>
<branch>
git help checkout
--onto
git help rebase
下一个:Zsh 的历史添加没有线索
评论
git push