首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我将一个分支与一个过期的本地主分支合并,并推送。如何撤消?

我将一个分支与一个过期的本地主分支合并,并推送。如何撤消?
EN

Stack Overflow用户
提问于 2020-09-19 09:48:08
回答 1查看 50关注 0票数 2

我一直在为一个项目的分支工作,这个项目是100+在master之前提交的。在过去的几天里,一位同事将一些更改推给了大师,而我从未将新的更改应用到我的本地环境中。

在我急于部署我的工作时,我忘记了首先从源/主服务器拉入,我将我的大分支与我的本地主服务器合并并推送到远程存储库。

现在我同事的所有更改都被删除了,而我似乎找不到恢复这些更改的方法。

我有什么选择?

EN

回答 1

Stack Overflow用户

发布于 2020-09-19 10:37:50

不要惊慌。它们都可以恢复。

最重要的是,在没有确切了解它们在做什么的情况下,不要再对进行任何推送。也许可以等到周一你的同事们回来。

如果没有--force,您就不应该能够进行推送。发生了一些其他的事情。让我们用图表来解决这个问题。

我一直在为一个项目的分支工作,这个项目是100+在master之前提交的。在过去的几天里,一位同事将一些更改推给了大师,而我从未将新的更改应用到我的本地环境中。

让我们称之为提前3次提交。您的本地repo如下所示。

代码语言:javascript
代码运行次数:0
运行
复制
          [origin/master]
A - B - C [master]
         \
          D - E - F [feature]

遥控器看起来像这样。

代码语言:javascript
代码运行次数:0
运行
复制
A - B - C - G - H - I [master]

在我匆忙部署我的工作时,我忘记了首先从源/主节点拉取,并且我将我的大分支与我的本地主节点合并...

在合并之后,您的repo将如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
          [origin/master]
A - B - C --------- M [master]
         \         /
          D - E - F [feature]

...and已推送到远程存储库。

你不能没有--force,因为你的本地主机和原始主机已经有了分歧。如果我们在git fetch之后查看您的回购,它将变得更加清晰。

代码语言:javascript
代码运行次数:0
运行
复制
          G - H - I [origin/master]
         /
A - B - C --------- M [master]
         \         /
          D - E - F [feature]

您的master不能通过简单地添加提交到simply /master来应用。git push将无法工作。

这里缺少一些东西。可能是因为...

你使用的git push --force.

  • Your同事从未推送到master.

  • ???

无论哪种方式,下面是你修复它的方法。

  1. 让您的同事git push --force他们的主分支。

这将恢复他们的master版本。

  1. 如果您删除了分支,请在合并之前重新创建分支。

您将需要它来重做合并。在上面的示例中,它将是git branch feature F

  1. git fetch

这将更新你对起源的想法。origin/master现在应该在同事的工作中。

代码语言:javascript
代码运行次数:0
运行
复制
$ git fetch

          G - H - I [origin/master]
         /
A - B - C --------- M [master]
         \         /
          D - E - F [feature]

  1. 签出母版和git reset --hard origin/master.

这将清除本地对master的更改,并将其恢复到源/master,从而有效地撤消合并。它只是将您的master标签移动到origin/master所在的位置。

代码语言:javascript
代码运行次数:0
运行
复制
$ git checkout master
$ git reset --hard origin/master

                      [origin/master]
A - B - C - G - H - I [master]
         \
          D - E - F [feature]

  1. 重做合并。

代码语言:javascript
代码运行次数:0
运行
复制
$ git merge feature

                    [origin/master]
A - B - C - G - H - I - M [master]
         \             /
          D - E ----- F [feature]

  1. git push.

代码语言:javascript
代码运行次数:0
运行
复制
$ git push

                          [origin/master]
A - B - C - G - H - I - M [master]
         \             /
          D - E ----- F [feature]

一旦解决了所有这些问题,考虑将master设置为受保护的分支,不能直接推送到该分支;对master的所有更改都必须经过一个集成步骤,如拉入或合并请求。GitLabGithub提供受保护的分支。或者可以用hooks来完成。

这避免了愚蠢,并确保master是一个稳定的代码库。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63964533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档