2017-01-25 79 views
0

我對Git相當陌生,自從接受一個新的客戶端(這是他們在開始爲他們工作之前一直用來管理他們軟件的版本控制)以來,在過去的幾個月裏一直使用它。Git用另一個分支替換master分支 - git merge -s我們的?

我最近合併了一個development分支和我的本地master分支,並將master推送到服務器。我已經在本地開發機器上測試了該網站(用Django/Python編寫的網站),然後將其推送到服務器,並且它看起來都工作正常(包括已在development分支上實施的錯誤修復)。

但是,在測試推送到服務器後所做的更改後,我發現某些內容已損壞網站的一部分。所以我在服務器上檢查了一箇舊的commit,現場版本現在使用那個舊的commit,這意味着它處於「分離的HEAD」狀態,但功能正常。

因此,我的本地master分支目前是我已推送到服務器(在本地工作,但沒有在服務器上)的錯誤修復的版本,但由於我需要在另一方面該網站,我想恢復到master的備份,這是我在將development分支與bug修復合併到master之前所做的備份,因此我正在從代碼的「最近運行」狀態進行開發。

我有我的機器上的分支是:

master(與development合併到它,它打破了別的東西)

masterBackup(即master分支,因爲它是合併development進去之前)

development(這是在其原有的bug已經修復的分支,但別的東西現在已經損壞)

如此有效,masterBackup實際上是我現在工作的'主'分支,因爲合併developmentmaster破了master。我想再次讓我的'主'分支masterBackup,並且在當前狀態下的master可以被丟棄/刪除。我仍然有development分支,所以可以查看爲什麼/如何破壞網站並在將其修復到master之前修復它。

我發現了這個問題How to replace master branch in git, entirely, from another branch?上公認的答案表明,我應該做以下步驟:

git checkout masterBackup 
git merge -s ours master 
git checkout master 
git merge masterBackup 

但我無法找到任何明確的解釋命令git merge -s ours做什麼...這是絕對如何讓我的masterBackup分支再次成爲master分支?

回答

3

的命令在該職位不適合你。該命令的結果是使masterBackup支路包括主分支的所有變化。因爲這不是你想要的。

如果你只是想masterBackup分公司工作的主分支,您可以通過

git branch -m master master1 
git branch -m masterBackup master 

重新命名它現在masterBackup是更換主分支。但是,如果你想要把本地的master分支到遠程主人,你應該使用git push -f origin master

0

最安全的選擇是後回覆到該被你的master分支發生作出的提交分離的承諾,一切工作正常:

git revert <SHA-1>^..HEAD # SHA-1 is the earliest commit you want gone 

這個選項將會使提交上master其頂部撤消範圍中的每個提交。在此之後,你的分支應該在功能上與你想要的地方相同。您可以像平常一樣繼續工作,照常進行。

但你也可以重寫的master歷史,如果你想。

警告:此選項將改寫您發表的master分支的歷史,因此只應考慮,如果你能處理的都與此有關注意事項。

如果你想你的master分支永久恢復到以前的承諾,你可以做以下步驟:

git checkout master 
git reset --hard <SHA-1 of earlier commit you want to keep> 

這將覆蓋本地master分支,使得它的頭現在是較早運作的承諾。

注意,這將改變遠程發佈的master分支的歷史,所以爲了更新遠程,你將不得不通過做力推:

git push --force origin master 
相關問題