好的,使用git我想用我的UAT分支覆盖我的舞台分支。在我完成推送后,我想从Stage中删除的代码仍然存在。我做错了什么?
git checkout UAT
git merge -s ours origin/Stage
git push
答案 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