场景如下:
- 我们有大约 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 分支上的提交历史如下,C1
到 C10
是您要还原的提交:
…---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/