Git 如何将一个远程分支覆盖而不是合并到另一个分支?

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

我有两个分支。分期和测试。暂存中有我根本不想要的代码(包括文件)。我如何使Beta版完全覆盖登台,从而使这些文件或代码都不会从登台版合并到Beta版

我看到一些人建议这样做:

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”。