Git Pull Request 没有变化,但 git diff 显示变化

时间:2021-06-02 08:18:37

标签: git azure-devops

我的分支有问题

简介

我的项目有 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。

问题

我怎样才能正确地向 Dev 分支提供我的 Main 分支的当前状态?

谢谢

1 个答案:

答案 0 :(得分:2)

可能发生的事情

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

如何合并Main并强制Dev采取Main的状态

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

不幸的是,您不能直接从 git merge -s theirs Main 执行 Dev,那太简单了。您必须从 git merge -s ours Dev 执行 Main 才能在 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 分支上再次重新创建重命名,可能手动。

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

相关问题