2015-02-23 107 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 
相關問題