在Git中覆盖Branch

时间:2013-12-04 19:47:47

标签: git

好的,使用git我想用我的UAT分支覆盖我的舞台分支。在我完成推送后,我想从Stage中删除的代码仍然存在。我做错了什么?

git checkout UAT
git merge -s ours origin/Stage
git push

3 个答案:

答案 0 :(得分:2)

如果您希望使用UAT上的内容完全覆盖分支,我建议您复制Stage分支,然后销毁Stage上的origin分支},然后从Stage重新创建UAT。类似的东西:

git checkout Stage 
git checkout -b StageCopy 
git push origin StageCopy

此时,如果您需要还原,则需要Stage的副本。

然后在Stage和本地......

上销毁origin
git push origin :Stage
git branch -D Stage

然后将UAT复制为“新”Stage

git checkout UAT
git checkout -b Stage
git push origin Stage

此时,如果您对Stage上的内容感到满意并且您绝对确定,那么您不需要旧的Stage(现在是{ {1}}),你可以销毁StageCopy

StageCopy

答案 1 :(得分:0)

您很近。因为没有“他们的”策略,所以您必须进行一些分支跳跃。为了使Stage看上去完全像UAT,必须先将Stage合并到UAT。

git checkout UAT
git merge -s ours Stage

这将在UAT上创建一个“虚拟”提交,使git认为它包括Stage中的所有历史记录,但实际上未更改UAT。通过此提交,您可以无冲突地重新合并到Stage中,但不应将其推送。

git checkout Stage
git merge UAT -m "Overwriting with UAT"
git diff UAT     # returns nothing

这将使Stage与UAT保持一致,而无需重写历史记录。

答案 2 :(得分:-1)

我认为你做了相反的事情 - 用Stage覆盖了UAT。我假设您已将所有内容推送到共享存储库中,并且不允许您在@ CDub的答案中强制推送分支。

您只需要恢复刚刚完成的合并提交:

 $ git checkout UAT
 $ git revert -m1 HEAD
 $ git push

之后才正确合并:

$ git checkout Stage
$ git merge -s ours UAT
$ git push