2017-05-31 66 views
1

我們構建了兩個主要分支:master和develop(這是一個關閉主分支)的git流。爲我們的網站創建新功能時,我們從主服務器創建分支,進行更改,然後將該分支(稱爲分支A)合併爲測試開發。Git在強制推後出錯 - 試圖避免硬復位

我們在PHP中有一個調用passthu("git pull 2>&1")的部署腳本,以便將更改拉到我們的開發服務器上,該服務器儘可能模仿我們的實時服務器。我們的開發服務器從開發分支中提取這些更改。

當我們對開發服務器上的更改感到滿意時,我們將分支A合併到主分支中,並在我們的實時服務器上運行部署腳本,以將更改應用到活動站點。

我的一個同事把他從主人制作的兩個分支合併(B到C),然後將結果合併爲發展。他聲稱Github在開發服務器上運行部署腳本之後「表現得很奇怪」,並決定強制推送他自己的開發副本,以便將存儲庫恢復到之前的狀態。

現在,在嘗試從新的服務器上運行部署腳本並在正常情況下推送它們通過我們的工作流後,我看到了"Please tell me who you are""fatal: empty indent not allowed"錯誤。

我試圖通過創建另一個腳本運行passthru("git reset --soft 2>&1")作爲this answer recommends來解決這個問題,該腳本刪除了這些錯誤。現在,我做任何改動,告訴我,Git並不承認在庫中的文件後,看到以下錯誤:

"error: Your local changes to the following files would be overwritten by merge: Please, commit your changes or stash them before you can merge. 
Aborting" 

試圖衍合(git pull --rebasegit rebase -i origin/develop)給了我同樣的"Please tell me who you are""fatal: empty indent not allowed"錯誤。

我正在離開硬重置作爲最後的手段。還有什麼我可以先嚐試的,不會對我們的開發網站造成重大問題?

+0

命令'git reset --soft HEAD〜N'應該在本地副本(不是開發服務器)上執行,然後通過'git push -f'推送到開發服務器。 –

回答

0

絕不要強行推動公共分支。部隊意味着歷史被重寫。永遠不是一個好的解決方案有時候回覆是必要的,但當開發者是一個人而且沒有人需要同一個分支時可以接受。

現在開發分支已被覆蓋,所有團隊成員需要拉遠程開發分支。如果遙控器是正確的,我建議你和所有的團隊成員......

  • git的結帳主
  • 的Git分支-D發展
  • 混帳取起源
  • git的結帳發展

該序列將刪除本地開發分支,並將拉動遠程分支。這是必要的,因爲開發分支不再是你們所有人在本地機器上的分支。