我如何撤消某人在 master 分支上删除 git 历史记录的操作?

问题描述 投票:0回答:1

我正在做一个学校项目,我的团队中有人在深夜推送了他们的代码,但是有几个主要问题:

  1. 他们直接推送到 master,而不是在自己的分支上。
  2. 他们的文件夹结构与其他人不同,他们的 git 文件夹位于项目之外(与项目内拥有 git 文件夹的其他人相比,多了一个目录)。
  3. 当他们推送时,他们以某种方式删除了 master 中的所有其他提交,在 github 中查看 master 分支历史记录时,只有一个提交,导致了这一点。

我认为这些是主要问题。我一直在处理大部分 git 控制,并且已经不得不恢复一些无意的推动来掌握,这是一个全新的野兽,我不知道从哪里开始。

我应该从哪里开始/我应该做什么?我对 git 还是有点陌生,所以这个问题已经完全难住了我。我可以以某种方式将我拥有的另一个分支更改为新的 master 吗?

我尝试使用 github 将未受影响的分支与 master 合并,但它说“master 和 other_branch 是完全不同的提交历史”并且不允许我做任何其他事情。

如果可能的话,我想保留“other_branch”的历史记录。

我尝试过检查 github 桌面中的分支,并使用 github studio,但由于更改,它不会让我拉/推。还没有尝试过使用 github 命令行,因为考虑到问题的规模,目前这似乎太令人畏惧了。

git github branch branching-and-merging merge-conflict-resolution
1个回答
0
投票

看来你需要在远程的主分支上设置一些保护规则。

事实上,您无法阻止某人完全更改其本地分支的历史记录,但幸运的是,您可以在远程分支上设置并执行保护规则

设置分支保护规则

要设置分支保护规则,只需转到 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 的开发人员分支(取决于您要遵循的流程),并相应地合并。

© www.soinside.com 2019 - 2024. All rights reserved.