我正在做一个学校项目,我的团队中有人在深夜推送了他们的代码,但是有几个主要问题:
我认为这些是主要问题。我一直在处理大部分 git 控制,并且已经不得不恢复一些无意的推动来掌握,这是一个全新的野兽,我不知道从哪里开始。
我应该从哪里开始/我应该做什么?我对 git 还是有点陌生,所以这个问题已经完全难住了我。我可以以某种方式将我拥有的另一个分支更改为新的 master 吗?
我尝试使用 github 将未受影响的分支与 master 合并,但它说“master 和 other_branch 是完全不同的提交历史”并且不允许我做任何其他事情。
如果可能的话,我想保留“other_branch”的历史记录。
我尝试过检查 github 桌面中的分支,并使用 github studio,但由于更改,它不会让我拉/推。还没有尝试过使用 github 命令行,因为考虑到问题的规模,目前这似乎太令人畏惧了。
看来你需要在远程的主分支上设置一些保护规则。
事实上,您无法阻止某人完全更改其本地分支的历史记录,但幸运的是,您可以在远程分支上设置并执行保护规则。
要设置分支保护规则,只需转到 GitHub 上的存储库并选择
Settings > Branches > Add branch protection rule
。在这里,您可以定义必须应用规则的分支的模式名称(在您的案例主控中)。然后启用选项 Require a pull request before merging
和 Require approvals
。这些将确保没有人能够再直接推送到 master 上。在 master 上引入新更改的唯一方法是通过拉取请求,在继续合并之前必须首先批准该请求。
现在,要在维护其他更改的同时恢复存储库,您可以创建一个临时分支并将其他更改拉入其中。
# create new temporary branch
git branch other_master
# select branch
git checkout other_master
# pulling current master's changes onto your temp branch
git pull origin master
此时,正如 @Kim 在评论中已经说过的那样,您可以强制您的 master 版本用您的版本覆盖遥控器上的当前历史记录。
# checking out master branch
git checkout master
# overwriting the history on the remote's master branch
git push --force origin master
-u
选项将新的临时分支推送到远程。这将确保您的本地分支 other_branch
现在将跟踪远程分支 other_branch
;否则,它将继续跟踪当前被覆盖的主分支。
# creating a new branch on the remote with the other master
git push -u origin other_master
从
other_master
创建一个新的拉取请求到 master
或覆盖 master 的开发人员分支(取决于您要遵循的流程),并相应地合并。