2017-03-06 82 views
1

我有Git master和dev分支。在嘗試將我的開發分支合併到我的主分支的過程中,我無意中做了一些錯誤,現在看起來主控已經搞亂了。我知道我的開發分支是好的,我不希望發生任何事情,所以我試圖用我的開發分支替換我的主分支。如果我可以保留我的主提交日誌條目,但是我可以丟失它們,只要我可以保留dev中的所有內容即可。我試圖實施這個Stackoverflow question中描述的解決方案,但他們不工作。下面是我所做的:無法用dev分支覆蓋Git master分支

$ git checkout dev 
$ git branch -f master dev 
$ git checkout master 
Switched to branch 'master' 
Your branch is behind 'origin/master' by 4 commits and can be fast-forward. 
(use "git pull" to update your local branch) 

如果我那麼做「混帳拉」,主分支不再包含Dev的變化和Git告訴我,我的分支上最新與「產地/主」。現在我該怎麼做?這是如何覆蓋主開發? Master不包含開發變更。如果我現在做「git merge --no-ff dev」,Git說「已經是最新的」。

我也試圖這樣做,以實現第二個答案如下:

$ git checkout dev 
$ git merge -s ours --no-commit master 
Already up-to-date. 
% git commit 
On branch dev 
Your branch is up-to-date with 'origin/dev'. 
nothing to commit, working tree clean 
$ git checkout master 
Your branch is behind 'origin/master' by 4 commits and can be fast-forward. 
(use "git pull" to update your local branch) 

正如你所看到的,這需要我馬上回我在那裏當我試圖實施第一個解決方案。我完全困惑。我如何用我的開發分支覆蓋我的主分支?

+0

閱讀關於git reflog。 Git在如何恢復到不同的「動作」方面非常靈活。 –

+0

您可以使用像gitk這樣的圖形存儲庫瀏覽器來了解情況。 'gitk'還允許您通過首先檢出該分支,然後右鍵單擊所需的提交併選擇'Reset to here',將分支指針移動到您喜歡的任何提交。 – mkrieger1

+0

從「狗狗」獲取幫助:'git log --all --decorate --oneline --graph'(** a ** ll ** d ** ecorate ** o ** neline ** g ** raph = adog)。或者,使用圖形瀏覽器,如@ mkrieger1建議的那樣。很顯然,問題的部分原因是您的上游存儲庫('origin/*')提供了您試圖從歷史記錄中「編輯」的提交內容,但尚不清楚您的其他情況。 – torek

回答

0

這將是很好,如果我能保持我的主人提交日誌條目

我會創造你目前掌握的一個新的分支來跟蹤所有的歷史。

  1. git checkout master
  2. git branch old-master

我想用我的Dev分支來代替我的主分支

要簡單地做到這一點,我只想硬重置你的主人分支到你的開發分支。

  1. git checkout master
  2. git reset --hard dev

這將毫不誇張的master分支的頭正好移動到dev分公司的負責人。

這將保持你的舊master歷史在old-master而不會搞亂任何東西。這也不會觸及你的dev分支。

+0

但是當我做「git reset --hard dev」時,Git說:「你的分支在5次提交後落後於origin/master,並且可以被快速轉發。」然後它說要做「git pull」來更新你的本地分支。但是,如果我做了「git pull」,那麼只需拉下舊的主代碼,並覆蓋在進行硬重置時從開發分支中引入的更改。再次,我陷入了一個無限循環。我似乎無法將開發人員的更改導入主服務器,然後將這些更改的新版主服務器推送到遠程主服務器回購站。到底是怎麼回事?爲什麼這不起作用?我只是不明白。 – William

+0

當你進行硬重置時,你正在改變歷史。如果你想在歷史中傳播這種變化,你需要按照上面第3步的「底部方向」做一個'git push --force'。這將消除主人的遠程歷史,而是強制它成爲當前的地方。我的腳步仍然會「保留」那位老主人的歷史,因爲我們在那裏分支,讓它保持活力。 'master'將是開發的地方(遠程帶有強制推送),'old-master'將會是主人曾經使用過的地方。 – g19fanatic

+0

這是失蹤的一步!謝謝!!!!! – William