Git:将分支合并到主分支时自动选择覆盖主分支文件

48

我正在使用Git来跟踪我的文档LaTeX源代码。我希望将主分支保留为适合最终用户发布的文档,因此当有人需要查找某些东西时,我可以切换到主分支,编译并交出文档。

当手册需要进行重大更新时,我会创建新分支。但是,当手册得到批准后,它需要合并回主分支。在从branch合并到master时,我想向Git传递一些命令,以便说:“忘记合并,只需使用branch中的文件覆盖master中的文件。” 有没有办法做到这一点?具体而言,我想避免每次都打开合并工具。提前感谢。


你可以进行交互式合并,并使用“yes”来逐步提供任何答案,以回答它询问要执行什么操作的问题... - R. Martinho Fernandes
3
交互式合并命令是什么? - S B
3个回答

74

如果你在 branch 分支上,想要忽略 master 分支,则需执行以下操作:

git merge master --strategy=ours

http://schacon.github.com/git/git-merge.html

如“计算机语言学家”Lilith River所述,这将“忽略所有来自'master'的修改,即使它有对新的、独立的文件的更改”。因此,如果你不是OP并且想要一个更安全的合并而不是像OP所说的“忘记合并”,那么请使用来自Lilith River的这个极好的安全命令,并投票支持他的评论以便他获得荣誉。

git merge -s recursive -X theirs <branch>

5
如果你在分支中并使用 git merge master --strategy=ours,那么它会保留分支的更改。(OP想要的结果) 但是如果你在主分支中使用 "ours",则它将保留主分支的更改。(相反的结果) - Robert
5
从我的理解来看,Mica想要将分支合并到主分支,并保持分支的状态,即git merge branch到主分支上,因此--strategy=ours与他想要的相反。 - Arne Claassen
47
从'master'分支,运行git merge -s recursive -X theirs branch将通过选择“branch”版本来解决所有冲突。使用-s ours将忽略来自'master'的所有内容,即使它对新的独立文件进行了更改。 - Lilith River
4
OP想将合并操作目标定为master分支,但@Robert的答案针对的是其他分支。 - S B
4
这个回答让我很困惑。那个命令正在做相反的事情。 - John John Pichler
显示剩余3条评论

15
在 Git 1.7.1 版本中,你可以使用“-Xtheirs”将分支本身合并。例如,如果你从主分支开始:
git checkout -b editBranch
-- 编辑你的文件 --
git add .
git commit -m "更新文件"
git checkout master
git merge -Xtheirs editBranch

我还看到另一种方法是基于这篇文章进行硬重置编辑分支:(链接)例如: git checkout -b editBranch
-- 编辑你的文件 --
git add .
git commit -m "更新文件"
git checkout master
git reset --hard editBranch

我认为第二种方法可能更好,但我还没有机会尝试过。

谢谢。我得回家更新Git,然后看看这个。非常感谢。 - Mica

2
我相信你可以使用“ours”合并策略来完成这个操作:
git checkout branch
git merge -s ours master

但是这并不完全符合您的要求:它覆盖了当前工作分支branch的内容,而您想要的是将相同的内容放到master上。您真正需要的是一种合并策略theirs,我会向您推荐这个类似的问题来解决它。实际上,它归结为将master重置为指向branch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接