git - 如何 "force"来自特定提交的 pull 请求?

标签 git version-control git-push pull-request git-reset

场景如下:

  • 我们有大约 10 个提交要从我们的 master 分支中恢复。它们引起了某种问题,我需要恢复到特定的提交 123abc;

我们在这里尝试了一些东西:

  • 我们创建了一个名为 feature/something 的新分支,以便还原提交并向主分支执行 pull 请求。但是,VSTS 提示我们没有新的更改。

  • 当我们在 master 分支中执行 git reset --hard 123abc 时,我的本地空间恢复为给定的提交,到目前为止没问题。但是,我无权强制推送到 master 分支。

所以,我的问题是:

  • 关于第 1 次尝试,如何让 git 理解我想将这些更改 pull 到 master 分支并且不提示?

  • 关于第二次尝试,如何从给定的提交强制来自主分支的 pull 请求?

谢谢大家!

最佳答案

无法通过 pull 请求对旧提交创建分支。

如果你没有强制推送权限,你应该在一个新分支上恢复更改并创建 PR 将新分支 merge 到 master 中,或者你可以要求团队项目管理员将 master 分支重置为一个旧的提交。

选项 1:还原 master 分支上的更改

假设 master 分支上的提交历史如下,C1C10 是您要还原的提交:

…---A---C1---C2---…---C10   master
  • 如果master分支没有分支策略,你可以直接在master分支上revert并推送到远程。

    # On local master branch
    git revert C1^..
    git push origin master
    

    还原更改后,master 分支上的提交历史应该是:

    …---A---C1---C2---…---C10---C10'---C9'---…---C1'   master
    
  • 如果master分支有分支策略,可以从master创建一个新的分支(比如feature/something分支)分支,然后还原 feature/something 分支上的提交并创建一个 PR 以将 feature/something 分支 merge 到 master 中:

    # On local master branch
    git checkout -b feature/something
    git revert C1^..
    git push -u origin feature/something
    

    那么提交历史将是:

    …---A---C1---C2---…---C10   master
                            \
                             C10'---C9'---…---C1'   fearure/something
    

    您可以创建一个 PR 将 feature/something merge 到 master 中。它不应该提示没有新的变化,除非你以相反的方式恢复/merge 。

选项2:要求团队项目管理员重置并强制推送到master分支

如果master 分支上没有分支策略,您可以要求团队项目管理员重置master 分支,然后强制推送(作为您尝试的第二次尝试)。或者你可以请求管理员允许你强制推送。

关于git - 如何 "force"来自特定提交的 pull 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47982404/

相关文章:

git - 如何列出包含给定提交的分支?

version-control - 是否有托管化石储存库的网站?

git - 推送一个重新设置的分支?

git - 红点标记 BitBucket 差异 View

linux - 如何在另一个目录中的单个 Git 存储库中管理不同目录中的 Linux 设置(配置)文件?

git - 我可以在 .git/config 文件中注释掉一行吗?

git - 如何通过ubuntu更新github中的文件

git - 恢复远程 Git 分支

git - 为什么开发人员提交 .dist 文件而不是实际文件?

git push origin 被 fallthru 拒绝,hook 拒绝 : gitolite