2011-06-06 87 views
7

好吧,肯定有這個帖子,但我實際上做了一個提交,因爲我認爲這是正確的事情。做一個git拉來覆蓋本地的變化

所以,我有2個回購,一個開發和一個生產。我不得不在生產中編輯一些東西,因爲這是一個緊急的錯誤修正,現在我有3個文件在生產中比在開發中更新。所以我所做的就是在製作3個文件時提交併嘗試了一次拉,但它告訴我存在合併錯誤。我試圖複製和粘貼新的文件到開發服務器,並重試整個事情,它沒有工作。現在我確定我需要的是在開發(因爲我複製並粘貼到它)並提交,所以我怎麼能並覆蓋衝突的文件?

感謝, 安德烈

----編輯跟進到@Seths回覆

好吧,我想我需要改寫我的問題:) 我有3個回購協議。一個開發者,一個在github和一個生產環境中。 通常更新生產我只是從開發推動github,git pull起源主(從github到生產),它的工作原理。 不幸的是,我改變了生產文件,而沒有存儲。如何在嘗試拉動時強制覆蓋而不是合併?

回答

22

如果你想如果你想別人做一些事情完全與遠程分支來源/富

git fetch origin 
git checkout foo 
git reset --hard origin/foo 

的內容替換您當地的分行FOO,請改寫你的問題。但是,我可能會將生產git倉庫添加爲遠程服務器,並將實時更改合併,而不是您嘗試的任何操作。

+0

好的,我想我需要改寫我的問題:) 我有3個回購。一個dev,一個在github和一個生產 通常更新生產我只是從開發推到github,git pull起源大師(從github到生產),它的工作原理。 不幸的是,我改變了生產文件,而沒有存儲。如何在嘗試拉動時強制覆蓋而不是合併? – Andre 2011-06-06 21:08:31

+0

@ user786463:我的回答究竟出了什麼問題?它似乎完全符合你的要求(對於「foo」的值可能等於「master」)。記住在完成時接受正確的答案。 – 2011-06-06 21:12:36

+0

工作就像一個魅力!謝謝。我不知道用'foo'代替什麼。 – Andre 2011-06-06 21:17:05

1

你需要從生產第一推到github。

git push origin yourbranch --force 

該力量將確保github有什麼生產。

以下是你可以做什麼準備:

您將需要獲取到您的開發回購在部署回購的變化。此時您會看到歷史記錄正在分支(通過git log --all --graphgitk --all)。

git fetch origin 

您現在可以進行重新佈局或合併,以使您的最新更改位於生產回購庫後面。這將使您能夠稍後將更改推送到您的部署庫。

衝突是有原因的。看看它們並解決它們,添加並提交。

如果你想在衝突中採取的是在生產方面,你可以使用「遞歸他們」的策略來解決:如果你想利用沒有從你身邊的變化

git merge -s recursive -Xtheirs production/yourbranch 

,合併通常,但是在衝突時停下來,得到合併的另一端,添加並提交。

git merge production/yourbranch 
git checkout production/yourbranch -- . 
git submodules update #this is optional and can be skipped if you don't have any submodules 
git add -A 
git commit 

現在隨後推動github從開發和從github拉生產將工作。

您可以重置分支,但假設您不想保留對開發倉庫所做的任何更改。

git reset --hard production/yourbranch 

希望這會有所幫助。