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

时间:2011-06-15 03:35:56

标签: git branch git-branch branching-and-merging

我正在使用git处理我的第一个项目并遇到了一个问题。

repo包含一个客户端/服务器应用程序。我有一个'主'和'测试'分支,意图主人总是与部署的一样。

我的问题在代码库中存在3-4个存储服务器URL的位置。我想在'test'分支中更改它,但不在'master'分支中。问题是,当我想要合并回'master'时,git想把这个改变放在'master'中。

我可以进行选择性合并并合并所有提交但有问题,但这对于每一次合并来说都是单调乏味的。最好的方法是什么?

我从来没有在任何 SCM中遇到过这个问题,所以也许我只是错了。

2 个答案:

答案 0 :(得分:1)

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

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

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中没有的东西进行重新定义,使其看起来像是一个合并。因为它将其存储为合并,所以您可以随后针对要发布到master的其他分支运行它。所以你可以用&& s分隔所有这些命令,用参数替换测试,用第二个参数变量替换master并使用别名:

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

以便您可以发布如下更改:

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

这应该给你测试和功能2,无论这些2可能已经在历史中合并。

还要考虑启用rerere,因为脚本不会发生冲突。因此,如果您确实要发布,可以先进行常规的rebase,记录冲突解决方案。现在,您可以更改脚本以利用这些脚本,而不是中断冲突。

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

- 或 -

非平凡的是涂抹干净的脚本。请查看progit.org/book中的git属性章节。

希望这会有所帮助。

答案 1 :(得分:0)

git cherry-pick允许你这样做(虽然你需要选择要合并的提交(并确保你不要忘记任何)

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

然而,另一种方法是git commit --no-commit,然后在提交之前更改文件git add

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

我认为这些都不是很优雅,但它会起作用......