首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >总是忽略git中合并上的某个提交。

总是忽略git中合并上的某个提交。
EN

Stack Overflow用户
提问于 2011-06-15 03:35:56
回答 2查看 4.3K关注 0票数 5

我正在使用git进行我的第一个项目,并且遇到了一个问题。

回购包含一个客户机/服务器应用程序。我有一个‘主’和‘测试’分支,意图是主人总是和部署的一样。

我的问题是,在代码库中有3-4个地方存储服务器URL。我想在“测试”分支中更改,而不是在“主”分支中更改。问题是,当然,每当我想要合并回‘主人’,吉特想把这个变化放在‘主人’。

我可以做一个选择性的合并和合并所有提交,但有问题的,但这似乎是乏味的做每一个合并。做这件事最好的方法是什么?

我从来没有遇到过这样的问题,所以我可能只是做错了这件事。

EN

回答 2

Stack Overflow用户

发布于 2011-06-15 04:54:37

您希望在该更改中合并为未实际合并,但在历史上将其标记为合并。这样,您就可以知道从哪里得到后续的更改。

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

代码语言:javascript
复制
git checkout master
git merge -s ours --no-ff testing
git checkout testing
git merge -s ours --no-ff master

代码语言:javascript
复制
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

现在有两个分支具有不同的信任,但这些提交都在重要的merge-base之前。

现在,您需要编写类似这样的脚本来执行特殊的合并,这实际上是下面的一个重基--这是忽略之前发生的事情的唯一方法:

代码语言:javascript
复制
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上没有的内容,并使它看起来像一个合并。因为它将其存储为合并,因此随后可以对希望发布到主服务器的其他分支运行此操作。因此,您可以使用&&来分隔所有这些命令,用参数替换测试,用第二个参数变量替换主命令,并将其化名为:

代码语言:javascript
复制
git config alias.smart-merge '...'

这样您就可以发布如下更改:

代码语言:javascript
复制
git smart-merge testing master
git smart-merge feature2 master

这应该为您提供测试和feature2,无论在什么时候,这2可能已经合并在历史上。

还可以考虑启用重新播放,因为脚本不需要冲突。因此,如果您确实想要发布,您可以先做一个常规的重基,记录冲突解决方案。现在,您可以修改脚本以利用这些优势,而不会破坏冲突。

重新确定冲突的解决可能是一种痛苦。但在这种情况下不是这样,因为我们只使用master来发布。其他分支操作仍然是通过常规合并或重基完成的。

-或者

重要的是污点干净的脚本。看一看plit.org/book中的git属性一章。

希望这能帮上忙。

票数 2
EN

Stack Overflow用户

发布于 2011-06-15 05:24:38

git cherry-pick将允许您这样做(尽管您需要选择提交合并(并确保您不会忘记任何)

另一种方法是,您可以git revert更改URL的提交,合并为master,然后将其放回主分支中。

还有一种方法是执行git commit --no-commit,然后在提交之前更改文件,git add

另一种可能避免“忘记”的方法是将这种配置(URL等)放入一个单独的文件中,并将该文件添加到.gitignore中.

我不认为其中任何一个都很优雅,但它会奏效的.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6352754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档