gpt4 book ai didi

Git Pull Request 没有变化但是 git diff show changes

转载 作者:行者123 更新时间:2023-12-04 07:34:30 25 4
gpt4 key购买 nike

我的分支有问题

简介

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

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

Main 分支上的错误 PullRequest 完成时,我们会创建一个 PullRequest Main -> Dev** 以保持最新的 Dev 分支机构。当开发新功能时,PullRequest 在 Dev 分支上完成。

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

的内容

问题

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

当我制作 git diff Main..Dev 时,我看到与上面相同的差异。

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

问题

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

谢谢

最佳答案

可能发生了什么

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

如何 merge Main并强制Dev获取Main的状态

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

不幸的是,您不能直接从Dev 执行git merge -s theirs Main,那样太简单了。您必须从 Main 执行 git merge -s ours Dev 以在 Dev 上创建您想要的 merge 提交:

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 恢复到原来的位置来清理沙箱,因为该 merge 是为 Dev 准备的:

git checkout Main
git reset --hard origin/Main

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

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

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

关于Git Pull Request 没有变化但是 git diff show changes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67801433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com