2013-04-23 60 views
28

我有两个分支。分期和Beta。分期中有代码(包括文件),我根本不需要。我怎样才能使Beta完全覆盖Staging,以便这些文件或代码都不会从Staging合并到Beta中。如何覆盖,而不是合并,一个远程分支到另一个分支?

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

git checkout staging 
git merge -s ours beta 

但我不相信预先存在,文件将是一个“代码冲突”,因此不会被删除。我错了吗?如果我是对的,我将如何实现这一目标?

+0

从'beta'提前'暂停'吗?你们两个分支之间的关系究竟是什么? – Rerito 2013-04-23 14:23:49

+0

他们都有一些未来的数据。但我不想在舞台上做任何事情。 – Trip 2013-04-23 14:50:18

回答

29

您可以简单的删除staging和基于beta重新创建:

git branch -D staging 
git checkout beta 
git branch staging 
+1

我也想过这个,但是我们没有足够的关于分支的信息。我认为OP不会问这个问题,如果他只需要删除他的分支 – Rerito 2013-04-23 14:27:00

+0

@Rerito:我不同意。有时候人们看不到简单的解决方案。 – 2013-04-23 14:28:54

+0

删除分支会破坏它的历史吗? – Trip 2013-04-23 14:53:55

8

我建议如果你改变了主意,你只需将其重命名。

git branch -m staging staging_oops 
git checkout beta 
git branch staging 

如果你实在无法忍受周围具有额外的分支:

git branch -D staging_oops 
22

如果你不在乎关于staging旧的历史,你可以重新创建:

git checkout beta 
git branch -f staging 

如果你在意关于staging旧的历史,那么事情s得到更多的乐趣:

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. 
+0

这会删除最近在暂存中创建的不需要的文件? – Trip 2013-04-23 14:51:40

+0

@Trip由于它将索引重置为“beta”中的内容,因此就Git而言,任何不在beta中的内容都应该被删除。 – Amber 2013-04-23 14:55:39

+2

不幸的是'git merge -s theirirs'在Git的新版本中不可用,所以这不会像书面一样工作。 – James 2015-11-19 16:58:17

0

如果分期的历史不会是一个问题,你可以简单地做到这一点。

git checkout staging 
git reset --hard beta 

只要记住分期的历史将不复存在上面的命令后 分期将有你的测试版分公司的工作。

相关问题