2015-02-23 106 views
1

是否可以将远程分支重置为其他远程分支?如何将分支分支重置为主

假设我有两个分支:masterdevelopdevelop分支由master组成,并用作集成/构建分支。它没有其他用途。

在冲刺结束时,所有被批准的特征分支都合并到主模型中。

在冲刺结束时,每个人都需要删除他的本地副本的开发分支,我们删除远程的一个,并且由主人制作一个新的。这并不理想,但我们使用的策略是我们达成一致并且最适合或需要的策略。它基于每个功能分支策略松散。

问题是,如果有人不删除他的本地副本,并执行更新,他会得到他的本地开发分支领先于远程的消息。这是因为从前一个sprint合并而来的功能分支并没有成为master,所以仍然在他的本地副本上。构建基础架构本身也处于风险之中,因为如果我们不执行完全清理检查,则我们仍旧存在旧东西存在的风险。

reset --hard这样的操作不起作用,它们可能会重置我的本地副本,但我无法将这些操作推送到远程分支。

有没有办法使开发分支完全相同的主分支使用提交,而不是重新创建它?

+0

如何使用'git的复位 - 硬起源/ master'的? – Rikesh 2015-02-23 10:05:40

+0

这不起作用,因为我无法将该重置推送到远程。如果我重置,我的本地副本确实干净,但远程没有。 – Jensen 2015-02-23 10:06:50

+0

对于您的问题,并非真正的答案,但您可能需要查看Git-Flow,它使用develop/master/features分支,但避免了您看到的问题:http://nvie.com/posts/一个成功的git分支模型/和https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow – nwinkler 2015-02-23 10:45:46

回答

1

所以,你的分支机构是masterdevelop。要重置developmaster

git checkout develop 
git reset --hard master 
git push -f <remote> develop 

或者,如果你已经删除的本地分支develop,你能做到一步到位:

git push -f <remote> master:develop 

这推动了当地的分支机构master ,但在远程将其命名为develop

-f--force标志的意思是“是的,Git,我试图删除数据,我知道我在做什么。”在这种情况下,推送develop将会丢失远程提交,但是您使用-f告诉Git您希望丢失这些提交。除非你知道原因,否则千万不要使用-f

+0

如果我强制推,这是否意味着其他开发人员将得到“重置”如果他们拉?还是他们仍然把所有的承诺都奉献给现在的发展? – Jensen 2015-02-23 10:08:35

+0

当他们拉时,他们将不得不'重置',如果他们有'develop'的本地副本的话。所以,是的,他们仍然将所有的承诺都放在“开发”上。 Git真的想通过让你更难以意外丢失数据来帮助你。在这种特殊情况下,你*会*想丢失数据,所以Git让你跳过一个额外的箍。 – 2015-02-23 10:09:02

+0

有没有一种方法可以“恢复”或“拉动”我的力量推动并失去其本地变化? (这是意图,我希望他们的本地副本反映远程,而不必删除他们的本地分支副本。) – Jensen 2015-03-06 13:46:51

1

更新您的本地版本,提交你想,然后用力将其推送到你的远程仓库:

git fetch origin 
git branch -f develop origin/master 
git push origin develop --force 
相关问题