Git 如何将一个远程分支覆盖而不是合并到另一个分支?
我有两个分支。分期和测试。暂存中有我根本不想要的代码(包括文件)。我如何使Beta版完全覆盖登台,从而使这些文件或代码都不会从登台版合并到Beta版 我看到一些人建议这样做:Git 如何将一个远程分支覆盖而不是合并到另一个分支?,git,branching-and-merging,Git,Branching And Merging,我有两个分支。分期和测试。暂存中有我根本不想要的代码(包括文件)。我如何使Beta版完全覆盖登台,从而使这些文件或代码都不会从登台版合并到Beta版 我看到一些人建议这样做: git checkout staging git merge -s ours beta 但我不认为预先存在的文件会是“代码冲突”,因此不会被删除。我错了吗?如果我是对的,我将如何实现这一点?您可以简单地删除staging,然后基于beta重新创建它: git branch -D staging git checkout
git checkout staging
git merge -s ours beta
但我不认为预先存在的文件会是“代码冲突”,因此不会被删除。我错了吗?如果我是对的,我将如何实现这一点?您可以简单地删除
staging
,然后基于beta
重新创建它:
git branch -D staging
git checkout beta
git branch staging
我建议你改名,以防你改变主意
git branch -m staging staging_oops
git checkout beta
git branch staging
如果你真的无法忍受周围有多余的分支:
git branch -D staging_oops
如果您不关心
暂存的旧历史记录
,您可以重新创建它:
git checkout beta
git branch -f staging
如果你真的关心登台的历史,那么事情就会变得更有趣:
git checkout staging # First, merge beta into staging so we have
git merge -s theirs beta # a merge commit to work with.
git checkout beta # Then, flip back to beta's version of the files
git reset --soft staging # Then we go back to the merge commit SHA, but keep
# the actual files and index as they were in beta
git commit --amend # Finally, update the merge commit to match the
# files and index as they were in beta.
如果登台的历史不会成为问题,您可以简单地这样做
git checkout staging
git reset --hard beta
只需记住,在执行上述命令和
staging将拥有您的beta分支机构的工作。是否从beta
开始进行staging
?你的两个分支机构之间的关系到底是什么?它们都有一些未来的数据。但是我不想要任何关于登台的信息。我也考虑过这个,但是我们没有足够的关于分支的信息。我认为,如果OP只需要移除他的手臂,他就不会问这个问题branch@Rerito:我不同意。有时候人们就是看不到简单的解决办法。但是移除分支会破坏它的历史?@Trip:是的。这不是你想要的吗?@Amber:哪里都没有。我说是吗?不,但我从“Staging中有我根本不想要的代码(包括文件)”中推断出来。如果他对暂存中的文件不感兴趣,那么导致这些文件的历史记录有何用处?这将删除暂存中最近创建的不需要的文件?@Trip,因为它会将索引重置回beta
中的索引,就Git而言,任何不在beta版中的内容都应该被删除。不幸的是,Git merge-s theres
在较新版本的Git中不可用,因此这不会完全按照编写的那样工作。如果您有较新版本的Git,请使用“Git merge-X theres”而不是“Git merge-s theres”。