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
)
這工作就像一個魅力。如果有人讀到這些信息,並想知道我的pull請求發生了什麼,它只需用2替換1提交。我在Github上向項目所有者添加了一條評論,告訴他如果已經這樣做了,就讓他知道該提交。 – NightOwl888 2012-04-07 14:06:53
所以爲了澄清:如果項目所有者已經合併了pull請求,然後我做了'git push --force origin fix',那麼項目所有者端的'git fetch'會拉入修復? – PonyEars 2013-09-25 22:09:55
如果更改已被拖動,則項目所有者需要重置,因爲提交仍將存在於其分支中。 '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