Git:合并到主文件,同时自动选择用分支覆盖主文件
Posted
技术标签:
【中文标题】Git:合并到主文件,同时自动选择用分支覆盖主文件【英文标题】:Git: Merge to master while automatically choosing to overwrite master files with branch 【发布时间】:2010-11-20 16:16:20 【问题描述】:我正在使用 Git 来跟踪我的文档 Latex 源。我想让主分支充满适合最终用户发布的文档,所以当有人需要什么时,我可以切换到主分支,编译并分发文档。
当手册需要重大更新时,我会创建新的分支。但是,当手册被批准后,它需要重新合并到主文件中。当从 branch 合并到 master 时,我想将一些命令传递给 Git,“忘记合并,只使用 branch 中的文件em> 覆盖 master 中的文件。"有没有办法做到这一点?具体来说,我想避免每次都打开合并工具。提前致谢。
【问题讨论】:
您可以进行交互式合并并用勺子喂它(使用yes
),无论答案是什么,当它询问要做什么时......
@r-martinho-fernandes:交互式合并命令是什么?
【参考方案1】:
忽略master
,当您签出branch
时:
git merge master --strategy=ours
http://schacon.github.com/git/git-merge.html
正如“计算机语言学家”在这里评论的那样,这将“忽略来自 'master' 的所有内容,即使它对新的独立文件进行了更改”。因此,如果您不是 OP,并且想要一个更安全的合并,而不是 OP 所说的“忘记合并”,那么请使用“计算机语言学家”的这个出色的安全命令,并加上他的评论,以便他获得信任。
git merge -s recursive -X theirs branch
【讨论】:
如果您在分支中并且您git merge master --strategy=ours
那么它会保留分支的更改。 (OP想要什么)但是如果你是主人并使用“我们的”,那么它会保留主人的。 (对面)
从我对问题的阅读来看,Mica 想将分支合并到 master,保持分支的状态,即 git merge branch
到 master,所以 --strategy=ours 与他想要的相反跨度>
从分支 'master',运行 git merge -s recursive -X theirs branch
将通过选择 'branch' 版本解决所有冲突。使用 -s ours 将忽略来自 'master' 的所有内容,即使它对新的独立文件进行了更改。
OP 想要将合并目标定位到 master
,但 @Robert 的答案目标定位到 branch
这个答案让我很困惑。该命令正在做相反的事情。【参考方案2】:
在 Git 1.7.1 版本中,您可以使用“-Xtheirs”来合并分支本身。
例如,如果您从 master 分支开始, 从master开始
git checkout -b editBranch
-- edit your files --
git add .
git commit -m "Updated the files"
git checkout master
git merge -Xtheirs editBranch
我看到的另一种基于this post 的方法是对editBranch 进行硬重置。例如:
git checkout -b editBranch
-- edit your files --
git add .
git commit -m "Updated the files"
git checkout master
git reset --hard editBranch
我认为第二种方式可能会更好,但我还没有足够的机会玩弄它。
【讨论】:
谢谢。我必须在家里更新 git,然后检查一下。非常感谢。【参考方案3】:我相信您可以使用“我们的”合并策略来做到这一点:
git checkout branch
git merge -s ours master
但这并不完全符合您的要求:它覆盖了 current 工作分支 branch
的内容,而您想要的是将相同的内容放到 master
上。你真正想要的是一个合并策略theirs
,为此我向你指出this similar question 的方法。实际上,归结为将master
重置为指向branch
。
【讨论】:
以上是关于Git:合并到主文件,同时自动选择用分支覆盖主文件的主要内容,如果未能解决你的问题,请参考以下文章
git---怎样将分支上的一个单文件合并到主分支上(master)