2009-10-28 59 views
6

我做了一個git commit但我沒有推。我現在正在研究一個新的錯誤修復,它不應該與第一次提交相同的文件。如何在沒有更早版本的情況下推送一個Git提交?

是否有可能對我犯這個錯誤修復和git push只有這個提交?

+7

它看起來像你問了50多個問題,但只接受了答案的一小部分。請考慮使用「接受」功能標記對您最有幫助的答案。 –

回答

7

所有提交給特定提交的提交都定義了新的提交。

也就是說,如果有一個主→dev的→錯誤修正如下所示的圖像中:

master → dev → bugfix http://img.skitch.com/20091029-tbffrg53q73mdipiwcr3g2ywuh.png

你可以把dev單獨但不bugfix單獨,但bugfix定義包括dev,所以dev有沒有bugfix

但是沒有任何意義,如果你建立這個bug修正了作爲一個特性分支,你有什麼事情,看上去更像是這樣的:

feature branch http://img.skitch.com/20091029-t3w5qk3bhj3ftx1d9xnk32ibkb.png

你仍然可以追溯做到這一點(從origin/master創建一個新的分支,摘櫻桃的變化,並在您的開發分支,然後git reset --hard HEAD^得到bug修正改變它關閉)。

一旦這就是完整的,你可以轉發端口的Dev分支用一個簡單的git rebase master,它會是這樣的:

new master http://img.skitch.com/20091029-1ts3enwsmsr29imcu7tyk75ett.png

在實踐中,從分支開始bug修復將會使這種一般來說,事情要容易得多。

6

你可以做的是將前一個提交移動到一個(臨時)分支,然後櫻桃選擇你的新提交到主。例如:

# first commit your current work 
git branch temp_branch 
git reset --hard HEAD~2 
git cherry-pick temp_branch 
git push 

然後,temp_branch將包含您的新提交。那麼以後您可以選擇您以前一回主:

git cherry-pick temp_branch^ 
git branch -D temp_branch 

這樣做了以後,你的主人分行將包含相同的兩次提交,你開始,但在相反的順序。

0

只是做另一個克隆,並從那裏推動你的錯誤修復。

+0

這個傢伙嚴厲,他不是嗎? – btelles

0

我們的商店廣泛使用個人分支。基本上,過程會是這樣的:

假設您目前在主分支

git checkout -b bug_fix_name_that_I_dont_want_to_commit 

上面創建一個分支,並檢查出來...這是你把你是提交沒有準備好推動。

現在您應該可以在不影響主分支的情況下對當前分支進行提交。

當你準備發佈/推一個承諾,只是做:

git push origin master 

和你的其他的提交不會去原產地庫。

當您準備將「錯誤修復」合併到主分支時,簽出主分支並執行;

git merge bug_fix_name_that_I_dont_want_to_commit 

我認爲這回答了這個問題,但如果沒有,請讓我知道!

相關問題