2012-12-23 53 views
0

如果我從Github下載了一些東西,並且我想在本地擦除在給定提交之後發生的所有事情,我該怎麼做?刪除特定之後的所有提交?或者在特定提交時克隆

或者相反,我可以在某個時間點下載/克隆倉庫嗎? (這將是幾個月大,但我不希望任何一個特定的點後,在我的存儲庫中顯示的任何更改)

我知道提交,說它是abc123def

+0

你可能沒有找到這個,因爲你的措辭有點不同,但你的問題本質上是一個dup,[在這裏回答](http://stackoverflow.com/questions/10303665/how-to-clone-一個特定版本的git-repository):) –

回答

0

當您在Git中克隆存儲庫時,您無法選擇特定的修訂版。您需要克隆整個存儲庫。

如果你想將所有從頭部的變化消滅一個特定的修訂版本,你可以指望該修訂和頭部

$ git log --oneline abc123def..HEAD | wc -l 

然後運行復位傳遞一些承諾要與提交的數量刪除(例如123)

$ git reset --hard HEAD~123 
+0

爲什麼不使用'checkout'(並且可能創建一個新的分支,如果新的提交將被添加)。在這種情況下,硬復位似乎有些苛刻,儘管我猜測它仍然有效(大概不會有新的變化會從上游引入)。 –

+0

'checkout'只會給他留下一個獨立的頭像,而且他必須要理清他的情況。而且他清楚地表明瞭'消滅' - 嚴厲的意圖的苛刻方法:)。 – Chronial

0

克隆存儲庫涉及下載所有遠程引用和所需的所有提交。 (至少我不知道的方式來限制這一點。)

一旦你克隆你可以自由地建立自己的分支機構任意提交的信息庫。

您可能想要類似git clone -n $urlgit checkout -b mybranch abc123def

之後,你應該看到git branch -av有你的分支指向你的舊提交以及指向新提交的遠程分支。

從您的分支點開始,所有更新的提交不再存在。這很可能是你想要的。

如果你真的想從你的倉庫中清除所有較新的提交,你必須刪除所有較新的引用(即分支和標籤)並使用git gc來清理所有內容。

0

Simone基本上是正確的,但有一個更簡單的方法。首先,如前所述,克隆將總是克隆所有內容,而你無法幫助克隆。但是,感謝git的極速,這通常不是問題。克隆後,只需看看你的分支和運行:

git reset --hard abc123def 

問題的SE優點:應該這樣,而已經編輯到Simone的答案嗎?

相關問題