2010-09-08 81 views
2

我正在一個項目中工作,當我做一個改變我犯了它。然後,在提交3或4次更改後,我全部推送。只推出一個修訂GIT倉庫

我想要做的只是推動我在本地修訂的其中一個。我可以那樣做嗎?怎麼樣?

謝謝

+0

「我想要做的只是提交我在本地修訂的其中一個。」我假設你的意思是「推」,而不是「承諾」。 – 2010-09-08 15:31:58

+1

使用git,一切皆有可能! – gawi 2010-09-08 15:33:23

+0

對對不起,我打算推其中一個 – pabloruiz55 2010-09-08 16:06:42

回答

7

嘗試在本地「工作」分支工作。這有一些優點,例如,如果你打電話來處理錯誤,你可以切換到另一個分支。

當你準備推送:git checkout master,git pull,git merge work,git push,將會是你的正常流程。

但是,您可以選擇從工作分支到主人的提交,這樣只會提交這些提交。

git checkout master 
git cherry-pick <id of commit you want> 
git push 

甚至現在你可能會這樣做。

git checkout -b work 
git log (and look for the IDs of the commits you want) 
git checkout master 
git reset --hard HEAD~3 (remove last 3 commits from master) 
git cherry-pick <ID of commit you want> 
git push 
+1

使用gitk,這是很容易做櫻桃採摘。 – gawi 2010-09-08 15:32:07

+0

pabloruiz55,注意我發佈的最後一步應該完成你所需要的。 – 2010-09-08 18:07:20

3

我不太清楚你想要做什麼。如果你有4個不需要的提交,你只想推送第一個提交,你可以通過它的參考git push。如果你想推動那些提交的第三個,但不是第一個或第二個,你將會遇到問題。你不能這樣做。 (好吧,你可能可以,但它會從樹的其餘部分斷開)。

如果您只是想在推送前將您的四次提交合併到一次提交中,則可能需要在單獨的分支中工作並使用壓縮合並。您不能將提交推送到遠程存儲庫,直到它存在於您的本地存儲庫中。您不能將提交合成爲推送的一部分(據我所知)。

+0

是的,我想要做的是推第一個(最古老的)它會是git推1234567890其中1234567890是修訂號? – pabloruiz55 2010-09-08 16:07:09

+0

我認爲你需要使用類似'git push 1234567890:master'的東西。替換適當的分支名稱。我剛剛檢查了git的manpage,我驚訝地發現這個用法並沒有列爲例子。 – 2010-09-08 17:48:17