所以我的上游仓库的主分支有点混乱。
在上游分支上提交如下所示。
A - Latest commit
|
B
|
C - Bad commit
|
D - Commit I want the upstream master branch to be at.
在我的分叉分支上,我可以做一个
git reset --hard D
。但是我如何将这些更改应用回上游主分支。从分叉分支到上游分支创建 PR(拉取请求)时,没有显示任何更改。
注意:禁止在上游分支上直接提交,必须使用来自 Fork 的 Pull 请求来完成。
编辑 这就是我克隆远程存储库的方式。
git clone http://myrepo.git
git remote add upstream http://main-repo.git
现在原点和上游如下所示。
origin - http://myrepo.git
upstream - http://main-repo.git
分叉存储库基本上是远程存储库的镜像克隆。在位存储桶 UI 上,有一个选项可以创建分叉并启用源和上游之间的分叉同步。
当我说分叉分支时,它意味着分叉存储库上的分支。
如果需要通过拉取请求来完成更改,则无法删除提交。
相反,你会想要恢复;这会创建一个新的提交,从而扭转不良提交的影响。这两项变化都将成为历史的一部分。
照常创建一个新分支,然后运行命令:
git revert hash_of_C
(在其中替换提交 C 的哈希值)。检查更改,如果需要,使用 git commit --amend
微调提交消息,然后正常推送审核。
如果您绝对需要删除提交,您需要与项目负责人讨论。编辑已经属于上游
master
的历史记录对整个团队来说是一个重大干扰,很可能你会被告知要恢复。如果项目负责人同意提交 C 不能成为历史的一部分,他们可能会自己删除它,最有可能的是暂时授予自己直接推送到 master 的权限。整个团队也需要收到警报。
您想要的操作是带有 --force 的 git Push,因为您没有执行此操作的权限。
然后替代操作可以是恢复操作,并且有一个优雅的解决方案供您恢复多重提交。
如何恢复多个 git 提交?
我同意恢复提交。这保留了导致代码当前状态的实际事件,以供历史参考。
现在,对于您希望使历史记录看起来“干净且不受污染”的部分,这可以通过压缩从提交“错误”的位置开始直到“恢复”提交的特定范围的提交来实现。但这可能需要一些管理员/维护者/所有者访问权限,具体取决于这些角色在 Git 存储库平台上的名称。向团队中有权访问这些角色的任何人寻求帮助。
不过,合并请求批准时大多数情况下都允许挤压提交。该操作由批准者执行,批准者或多或少被配置为有权访问我上面提到的角色。但不确定它是否可用于 PR。