2012-10-03 55 views
0

因此,我在github中分出了一個項目,並且由於'push'命令期間出現錯誤而無法將我的本地更改推送到原始回購站,因此需要先執行'pull'。那麼問題是'拉'不斷覆蓋我所有的本地提交。如下所示Git無法推到github上的分叉回購

實施例:

有一個項目A(遠程=上游)在github我分叉到我自己的項目(遠程=原點)。然後我創建了一個分支「branch_a」,我在其中添加了所有修補程序更改並將此分支推送到我的遠程原始庫。我最終用多個提交來處理整個過程,所以我需要將我的提交壓縮成一個,以便提交一個合併請求以將我的更改發送到項目A.嘗試壓縮提交併與上游回購同步的步驟如下:

git rebase -i upstream/master

我看到4名提交併選擇了一個我想要的,刪除其它

git push origin branch_a

收到的錯誤:

! [rejected] branch_a -> branch_a (non-fast-forward) error: failed to push some refs to 'https://github.com/#####/#####.git' To prevent you from losing history, non-fast-forward updates were rejected Merge the remote changes (e.g. 'git pull') before pushing again. See the 'Note about fast-forwards' section of 'git push --help' for details.

然拉命令:

git pull origin branch_a

收到的消息:

  • branch branch_a -> FETCH_HEAD Merge made by recursive. libpex/INSTALL | 364 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 364 insertions(+), 0 deletions(-) create mode 100644 libpex/INSTALL

本地提交由拉命令完全覆蓋(我曾試圖刪除這個文件約10倍,但它不斷回來)。

所以,現在我又回到了4次提交,我不能爲我的生活把正確的提交回到我的原始回購。我能做些什麼呢?

回答

1

如果你想告訴Git的推你所擁有的,並覆蓋不管是在目的地(這可能會破壞歷史,所以小心使用),然後提供--force你推聲明:

git push --force origin branch_a 

這將導致origin/branch_a分支更新爲指向您當地的branch_a分支,無論它是否是快進。 從本地branch_a分支或任何其他遠程分支無法訪問的任何提交origin/branch_a可能會丟失在遠程存儲庫中。

+0

謝謝你的工作,然而在接受這個答案之前,你能解釋爲什麼我需要這樣做嗎?看起來好像我處於一個糟糕的狀態,或者如果我必須使用'--force'選項來執行一個常規操作,Git UI會出現問題。 – midnitex31

+0

問題是,你在'branch_a'上提交了提交,然後以某種方式重寫了歷史 - 你改變了'branch_a'的過去,所以推送不再是快進。任何時候你重組一個分支,你都會改變它的歷史。這就是爲什麼建議避免重新裝訂已經推送到其他地方的分支。您不僅需要強制推送,而且因爲您的分支的歷史記錄不再與您現有的分支相匹配,所以任何從您的分支中分出的人現在都會被擰緊。 – cdhowie

+0

好吧,也許這是由主項目的開發人員定義的過程的問題。他們告訴我要做的是分叉回購,進行更改,然後創建一個提交請求。然後他們給我提供了關於補丁的反饋,所以我做了一個rebase,接着我的補丁,並嘗試重新提交pull請求,但推動失敗。儘管我一個人在工作,但我的分叉回購不是問題。但我認爲你的解釋確實有道理。謝謝。 – midnitex31