【问题标题】:forgot to git pull before git push在 git push 之前忘记了 git pull
【发布时间】:2021-09-12 21:39:05
【问题描述】:

我刚刚推送了一个更新分支,对我的 GitLab 原始存储库(我已经从 GitLab 上的另一个存储库分叉)进行了一些更改,并创建了一个合并请求(将推送的分支合并到上游存储库,我已经在其中分叉了我的源从)。它向我显示了合并冲突。

问题:
在我从 master 分支分支更新分支的时候,我的 master 已经不是最新的了(上游 master 已经有一些变化)

问题
我该如何解决这个问题(我希望我的提交在上游 master 的提交之上)?是否可以将我的本地 master 与上游 master 同步,然后将这些额外的提交合并到我的更新分支中,将“更新”的更新分支推送到我的源,最后发出新的拉取请求?

编辑

那就是目前的情况:

橙色提交(3 和 4)是在我分叉存储库后在上游引入的。所以它们不存在于我的起源中,随后也不存在于我的本地仓库中。因此,当我将更新分支(提交 5 和 6)推送到我的源并创建合并请求时,我会收到错误“合并冲突”,因为这些提交在我推送的更新分支中丢失,并且在合并请求中(至少这就是我的想法,为什么会发生合并冲突 - 或者这是否还有其他原因?)。

所以解决方案是,以某种方式在我的来源中获取那些新引入的提交(3 和 4),然后从那里进入我的本地存储库。然后我可以创建一个包含所有内容的“更新”更新分支,然后我可以将其推送到我的源并创建一个新的合并请求。像这样:

这有可能实现吗?

【问题讨论】:

  • 使用 git reflog 找到你想要的提交。恢复并修复它,然后推送到您的远程主分支。阅读使用 git rebase -i 来实现这些东西。很有帮助。
  • git merge REMOTE_URL master && git pushgit pull -r REMOTE_URL master && git push -f
  • 这个必须有一个副本。您所需要的只是获取和合并上游,并推送到您的 pr(如 JBalin 所示)- 所描述的是一个非常正常的场景
  • @AD7six:是的,我认为你是对的,我应该研究得更彻底!我很难学习 git,但它正在慢慢变得更好。
  • @everyone:感谢您的时间和提示,非常感谢!

标签: git gitlab pull-request git-push git-pull


【解决方案1】:

你基本上想重新设置你的分支:

git checkout update

# Fetch commits from upstream
git fetch upstream

# Replay the commits of your update branch over master branch of upstream
git rebase upstream/master

注意:这不会更新您的本地 master,但您不一定需要。

【讨论】:

  • 嗨,感谢您的提示!问题是,我不允许修改上游仓库(因为我不是所有者)。因此,在我将本地更新推送到我的源并从那里创建一个新的合并请求之前,我首先必须将来自上游/主服务器的缺失提交合并到我的本地更新中(至少我认为我必须这样做(我我对 git 不是很有经验))
  • 哦,等等,也许我弄错了。我以为你的命令是对上游仓库起作用(我不允许这样做),但它们实际上是对我的本地仓库起作用,对吗?如果这是正确的,那么你的答案可能已经是解决方案了!
  • 如果您要建议变基 - 答案还必须提及强制推送,否则答案不完整
  • @Gael:我认为这真的解决了它,谢谢! :)
  • 是的,我也会牢记力推!谢谢! :)
猜你喜欢
  • 2012-09-07
  • 2017-03-09
  • 2014-03-09
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-22
  • 2021-05-26
相关资源
最近更新 更多