gpt4 book ai didi

git - 在 git merge 时总是忽略某个提交

转载 作者:太空狗 更新时间:2023-10-29 13:26:57 26 4
gpt4 key购买 nike

我正在使用 git 开发我的第一个项目,但遇到了一个问题。

该存储库包含一个客户端/服务器应用程序。我有一个“master”和“test”分支,目的是 master 始终与部署的相同。

我的问题是在存储服务器 URL 的代码库中有 3-4 个地方。我想在“测试”分支中更改此设置,但不想在“主”分支中更改。当然,问题是每当我想 merge 回“master”时,git 都想把这个更改放在“master”中。

我可以进行选择性 merge 并 merge 所有提交,但有问题的提交除外,但这对每次 merge 都似乎很乏味。执行此操作的最佳方法是什么?

我在任何 SCM 中从未遇到过这个问题,所以也许我只是在做这一切都是错误的。

最佳答案

您想 merge 该更改,因为它实际上并未 merge ,但在历史记录中将其标记为如此。这样您就会知道从哪里获得后续更改。

有几种方法可以做到这一点。一个是

git checkout master
git merge -s ours --no-ff testing
git checkout testing
git merge -s ours --no-ff master

git checkout master
git merge testing --no-commit --no-ff
git checkout HEAD -- .
git submodule update # this is optional and only needed if you have submodules
git add -A
git commit
git checkout testing
git merge master --no-commit --no-ff
git checkout HEAD -- .
git submodule update # this is optional and only needed if you have submodules
git add -A
git commmit

现在您有 2 个具有不同配置的分支,但这些提交在重要的 merge-base 之前。

现在您需要编写类似这样的脚本来执行特殊 merge ,这实际上是底层的 rebase ——这是忽略之前发生的事情的唯一方法:

git checkout master
git merge --no-ff -s ours testing
git checkout -b temp testing
git rebase -s recursive -Xtheirs master # these are the conflicts we care about
git reset --soft HEAD@{2}
git add -A
git submodule update
git commit --amend -C HEAD@{2}
git push . +HEAD:master
git checkout master
git branch -d temp

这只是将您在分支测试中没有的 master rebase ,并使它看起来像一个 merge 。因为它将它存储为 merge ,所以您随后可以针对要发布到 master 的其他分支运行它。所以你可以用 && 分隔所有这些命令,用一个参数替换测试,用第二个参数变量和 master 替换它:

git config alias.smart-merge '...'

这样您就可以像这样发布更改:

git smart-merge testing master
git smart-merge feature2 master

无论 testing 和 feature2 在哪一点可能已经 merge 到历史记录中,它都应该给你。

还可以考虑启用 rerere,因为脚本预计不会发生冲突。所以如果你确实想发布,你可以先做一个常规的 rebase ,记录冲突解决方案。现在您可以更改脚本以利用这些优势而不因冲突而中断。

Rebase 冲突解决可能会很痛苦。但在这种情况下不是,因为我们只使用 master 来发布。其他分支操作仍然通过常规 merge 或 rebase 来完成。

-- 或者 --

重要的是涂抹干净的脚本。查看 progit.org/book 中的 git 属性章节。

希望这对您有所帮助。

关于git - 在 git merge 时总是忽略某个提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6352754/

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