【问题标题】:Git Pull Request no changes but git diff show changesGit 拉取请求没有更改,但 git diff 显示更改
【发布时间】:2021-06-02 21:02:06
【问题描述】:

我的分支有问题

简介

我的项目有 3 个分支:Dev、Main 和 Staging

我们在 Dev 分支上添加新功能,在 Main 分支上修复错误,在 Staging 上我们部署用于测试。

Main 分支上的错误 PullRequest 完成时,我们会发出 PullRequest Main -> Dev** 以保持最新的 Dev 分支。 开发新功能时,Dev 分支上的 PullRequest 完成。

当我们想要部署所有新功能时,我们先创建一个 PullRequest Dev -> Main,然后再创建一个 PullRequest Main -> Staging。最后我们部署Staging分支的内容

问题

当我手动比较我的分支 DevMain 时,我发现存在差异:在 Dev 分支中,一些文件出现在文件夹中,但在之前的 Main 分支上的提交中,它已被移动到另一个文件夹。

当我创建git diff Main..Dev 时,我发现与上面的不同。

通常,此时,这两个分支必须处于相同的状态。所以我做了一个 PullRequest Main -> Dev 给分支 Dev 正确的状态(Main 状态):但它说没有我的 PullRequest 的更改。

问题

如何正确地将我的 Main 分支的当前状态提供给 Dev 分支?

谢谢

【问题讨论】:

  • ",我看到有区别。",你能告诉我们你看到的什么样的不同吗?
  • 我更新了问题以增加句子“的精度,我发现有区别。”
  • 拉取请求如何结束?合并、变基或压缩和合并?
  • 如果你想要完全相同的状态,你不想合并你想强制分支相同。你可以通过修复一些导致这种差异的合并冲突来达到这种状态,在合并之后你会得到这个分辨率。
  • @matt : 这是“合并(无快进)”

标签: git azure-devops


【解决方案1】:

可能发生了什么

正如@matt 在 cmets 中所说,这可能是先前合并的结果,其中冲突可能已在不移动文件的情况下解决。现在,当你再次合并时,Git 认为它已经处理了重命名,因此它不必处理它。您可以通过查看自上次合并点以来的提交历史记录来证实这一理论:重命名是在那之前还是之后?

如何将Main合并到并强制DevMain的状态

如果此时您想丢弃Dev 的当前状态并使其与Main 的状态完全相同,并且您想使用合并操作,我会使用ours战略。我不确定您是否可以通过 PR 完成此操作,您可能必须在您的 PC 上完成并推送,我希望您的工作流程允许这样做!

很遗憾,你不能直接从Devgit merge -s theirs Main,那太简单了。您必须从Main 执行git merge -s ours Dev 才能在Dev 上创建您想要的合并提交:

git checkout Main
git merge -s ours Dev  # this "merges" Dev in but ignores all its changes
# don't push this!
git checkout Dev
git merge Main  # this should be a fast-forward merge
# now you can push Dev

您可以在完成后清理您的沙盒,方法是将 Main 带回原来的位置,因为该合并是为 Dev 准备的:

git checkout Main
git reset --hard origin/Main

如果我想要 Main 的重命名,但又不丢失 Dev 中的其他更改,该怎么办?

在这种情况下,我认为您需要做一些手动工作。如果重命名确实在上一次合并之前,并且将这些提交带入 Dev 历史记录的合并在没有应用重命名的情况下被解决,则您需要在 Dev 分支上重新创建重命名,可能是手动的。

我不认为您可以选择返回之前的合并并正确重做,但如果可以,那可能是最干净的选择。

【讨论】:

  • 感谢您的解决方案,它有效!不知道merge命令的参数“-s ours”,感谢发现!
猜你喜欢
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 2011-04-24
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 2019-03-07
相关资源
最近更新 更多