我在git倉庫做兩次提交/文件和他們推到我的git服務器拉承諾從混帳
的兩次提交的
- 在第一次提交文件中的承諾
- 在第二次提交的文件B致力於
現在其他開發服務器上我想只拉第一次提交或文件A F rom git服務器。這個怎麼做 ?
我在git倉庫做兩次提交/文件和他們推到我的git服務器拉承諾從混帳
的兩次提交的
現在其他開發服務器上我想只拉第一次提交或文件A F rom git服務器。這個怎麼做 ?
首先,你的開發服務器上,你需要從這樣的混帳服務器上獲取提交的名單:
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^
這將提取所有提交從回購,然後檢查您的本地回購提交之前提交的提交。這裏唯一的缺點是你將處於「獨立頭」狀態,並且不得不在本地創建一個新的分支,但這不是一個大問題。
創建一個具有第一次提交但不是第二次的新分支,並檢出該分支? –
@ThongKuah謝謝,但它不是一個好方法?任何其他方式? – Dau