我正在使用git进行我的第一个项目,并且遇到了一个问题。
回购包含一个客户机/服务器应用程序。我有一个‘主’和‘测试’分支,意图是主人总是和部署的一样。
我的问题是,在代码库中有3-4个地方存储服务器URL。我想在“测试”分支中更改,而不是在“主”分支中更改。问题是,当然,每当我想要合并回‘主人’,吉特想把这个变化放在‘主人’。
我可以做一个选择性的合并和合并所有提交,但有问题的,但这似乎是乏味的做每一个合并。做这件事最好的方法是什么?
我从来没有遇到过这样的问题,所以我可能只是做错了这件事。
发布于 2011-06-15 04:54:37
您希望在该更改中合并为未实际合并,但在历史上将其标记为合并。这样,您就可以知道从哪里得到后续的更改。
有几种方法可以做到这一点。一个是
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现在有两个分支具有不同的信任,但这些提交都在重要的merge-base之前。
现在,您需要编写类似这样的脚本来执行特殊的合并,这实际上是下面的一个重基--这是忽略之前发生的事情的唯一方法:
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上没有的内容,并使它看起来像一个合并。因为它将其存储为合并,因此随后可以对希望发布到主服务器的其他分支运行此操作。因此,您可以使用&&来分隔所有这些命令,用参数替换测试,用第二个参数变量替换主命令,并将其化名为:
git config alias.smart-merge '...'这样您就可以发布如下更改:
git smart-merge testing master
git smart-merge feature2 master这应该为您提供测试和feature2,无论在什么时候,这2可能已经合并在历史上。
还可以考虑启用重新播放,因为脚本不需要冲突。因此,如果您确实想要发布,您可以先做一个常规的重基,记录冲突解决方案。现在,您可以修改脚本以利用这些优势,而不会破坏冲突。
重新确定冲突的解决可能是一种痛苦。但在这种情况下不是这样,因为我们只使用master来发布。其他分支操作仍然是通过常规合并或重基完成的。
-或者
重要的是污点干净的脚本。看一看plit.org/book中的git属性一章。
希望这能帮上忙。
发布于 2011-06-15 05:24:38
git cherry-pick将允许您这样做(尽管您需要选择提交合并(并确保您不会忘记任何)
另一种方法是,您可以git revert更改URL的提交,合并为master,然后将其放回主分支中。
还有一种方法是执行git commit --no-commit,然后在提交之前更改文件,git add。
另一种可能避免“忘记”的方法是将这种配置(URL等)放入一个单独的文件中,并将该文件添加到.gitignore中.
我不认为其中任何一个都很优雅,但它会奏效的.
https://stackoverflow.com/questions/6352754
复制相似问题