2012-01-19 160 views
9

我在git倉庫做兩次提交/文件和他們推到我的git服務器拉承諾從混帳

的兩次提交的

  • 在第一次提交文件中的承諾
  • 在第二次提交的文件B致力於

現在其他開發服務器上我想只拉第一次提交或文件A F rom git服務器。這個怎麼做 ?

+0

創建一個具有第一次提交但不是第二次的新分支,並檢出該分支? –

+0

@ThongKuah謝謝,但它不是一個好方法?任何其他方式? – Dau

回答

0

這並沒有多大意義 - 如果你提交的文件是你在回購庫中有的話。

也許這是你想要的

git checkout -- FileAOnly 

或者

git checkout origin/master -- FileAonly 
+1

結帳用於從本地系統中的舊提交中檢索文件。但我的問題是如何從git服務器拉特定的提交/文件 – Dau

+0

已編輯的答案(+2更多字符) –

+0

可以使用結帳簽出/主用嗎? – Dau

19

首先,你的開發服務器上,你需要從這樣的混帳服務器上獲取提交的名單:

git fetch origin master (or whatever branch you need) 

然後有幾個選項來實現你想要的:

Cherry挑選第一個提交 - 這只是從另一個分支/回購中「選取」所選提交併將其應用到當前的本地分支。它可能非常有用,但應謹慎使用(見下文)。

git cherry-pick <hash-of-commit-you-want> 

在這種特殊情況下,你可以做

git cherry-pick FETCH_HEAD^ (gets commit before the HEAD of what's been fetched) 

或者,拉一切,然後做一個硬復位到提交你想(在這種情況下,一個剛HEAD之前)。硬重置有效地將本地分支回退到所選提交,並將所有文件的狀態更改爲當時的狀態(所以在這種情況下,文件B將被刪除,或返回到之前的狀態承諾,取決於它是否以前存在)。

git pull 
git reset --hard HEAD^ (or git reset --hard <hash-of-commit-you-want>) 

我寧願第二種選擇,因爲櫻桃採摘可以有一些敲擊效果,如果你不小心。我相信它會爲提交創建一個新的哈希,所以選擇提交和原始提交併不完全相同。恐怕我現在沒有時間來閱讀這些內容,確切地確定這些缺陷是什麼,但是我強烈建議你自己調查一下,如果你決定使用它的話。

編輯 - 另一種解決方案(考慮到這是一個活生生的服務器和文件B,在任何一點的服務器上出現了它不能接受)是做到以下幾點:

git fetch origin master 
git checkout FETCH_HEAD^ 

這將提取所有提交從回購,然後檢查您的本地回購提交之前提交的提交。這裏唯一的缺點是你將處於「獨立頭」狀態,並且不得不在本地創建一個新的分支,但這不是一個大問題。

+0

thanx爲答案,我認爲你的第一個選擇對我來說是正確的,我也考慮選擇第​​二個選項時,當我問這個問題,但沒有選擇,因爲我認爲這是一個錯誤的方式。順便說一句,讓我檢查 – Dau

+0

在我心中的疑問是,如果我們'取得原產主,那麼它會立即對代碼產生影響',這是我將要採取的拉活動服務器。所以文件B也會出現在服務器上一段時間? – Dau

+0

啊,我明白了!我沒有意識到這是一個活的服務器。你是對的。在這種情況下,你應該選擇你想要的提交。或者,您可能只需簽出該分支直至您想要的特定提交。 –