我的分支有问题
我的项目有 3 个分支:Dev、Main 和 Staging
在 Dev 分支上,我们添加新功能,在 Main 分支上修复错误,在 Staging 上部署以进行测试。
当在 Main 分支上完成一个错误 PullRequest 时,我们会创建一个 PullRequest Main -> Dev** 以保持最新的 Dev > 分支。 开发新功能时,会在 Dev 分支上完成 PullRequest。
当我们想要部署所有新功能时,我们先创建一个 PullRequest Dev -> Main,然后创建一个 PullRequest Main -> Staging。最后我们部署Staging分支
的内容当我手动比较我的分支 Dev 和 Main 时,我发现存在差异:在 Dev 分支中,一些文件出现在文件夹中,但它之前在 Main 分支上的一次提交中被移动到另一个文件夹。
当我制作 git diff Main..Dev
时,我发现与上述相同的差异。
通常,此时这两个分支必须处于同一状态。所以我做了一个 PullRequest Main -> Dev 给分支 Dev 正确的状态(Main 状态):但它说没有更改我的 PullRequest。
我怎样才能正确地向 Dev 分支提供我的 Main 分支的当前状态?
谢谢
答案 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
分支上再次重新创建重命名,可能手动。
我不认为您可以选择返回到先前的合并并正确地重做,但如果可以,那可能是最干净的选择。