2012-04-07 93 views
29

基本上,我有一個打開的拉取請求,我想解決這個問題,同時我想將包含2個特性的1個提交分成2個獨立的提交。如何將新的(重寫)歷史記錄推送到遠程存儲庫中

Github上庫現在看起來是這樣的地方修補程序是一個新的分支:

master c-c-c 
      \ 
    fix c-c-c-c 

我創建從修復拉請求。

我想改變最後一次提交的修訂爲2個提交在我的本地庫如下:

master c-c-c 
      \ 
    fix c-c-c-n-n 

其中n-n是我的2次新的提交。

爲了得到這一點在本地,我這樣做:

1. git rebase -i HEAD~2 
2. Changed my last commit line to "edit", saved and closed the file 
3. git reset HEAD^ 
4. git stash save 
5. Removed the changes I don't want in the first commit 
6. git commit -m "commit a" -a 
7. git stash apply 
8. git commit -m "commit b" 

所以現在我有2款,我想要的方式。問題是我發現了一個錯誤,最終在pull請求中。由於我已經推送到遠程存儲庫,它不會接受我的新提交(因爲原來的提交失蹤)。

我運行:

git push origin fix --dry-run 

和我得到的消息:

To [email protected]:<UserName>/<Repository>.git 
! [rejected]  fix -> fix (non-fast-forward) 
error: failed to push some refs to '[email protected]:<UserName>/<Repository>.git' 

我看到其他職位建議再次推回前拉離原點我的變化,但不會基本上重置我的2提交到一個?

理想情況下,我想要做的是將相同的提交ID分配給最後一次提交,以便它可以按原樣替換當前提交ID。有沒有辦法做到這一點? (請注意,我沒有--hard運行git reset

回答

60

當面對這樣的問題,一個力推一直爲我工作:

git push --force origin fix 
+1

這工作就像一個魅力。如果有人讀到這些信息,並想知道我的pull請求發生了什麼,它只需用2替換1提交。我在Github上向項目所有者添加了一條評論,告訴他如果已經這樣做了,就讓他知道該提交。 – NightOwl888 2012-04-07 14:06:53

+0

所以爲了澄清:如果項目所有者已經合併了pull請求,然後我做了'git push --force origin fix',那麼項目所有者端的'git fetch'會拉入修復? – PonyEars 2013-09-25 22:09:55

+4

如果更改已被拖動,則項目所有者需要重置,因爲提交仍將存在於其分支中。 'git fetch origin'然後'git reset --hard origin/master'。參見:http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head – NightOwl888 2013-09-26 05:34:10

相關問題