2012-12-21 49 views
30

對提交進行了更改,執行commit commit。做一個推,我得到的錯誤:Git/gerrit,推送遠程拒絕未作任何更改

! [remote rejected] master -> refs/for/master (no changes made) 

檢查提交消息中的更改ID,它仍然是一個有效的提交。

我試過更改一個文件,檢查它顯示爲一個變更,然後添加到暫存區域,並做了另一個提交修改。再次嘗試推送並獲得相同的問題。不知道這一個。

編輯:這是推動gerrit,而不是直接git。

我運行:

git push origin master:refs/for/master 

並獲得原產地的詳細的結果是(公司細節編輯了):

$ git remote show origin 
* remote origin 
    Fetch URL: ssh://[email protected]:29418/myrepo 
    Push URL: ssh://[email protected]:29418/myrepo 
    HEAD branch: master 
    Remote branch: 
    master tracked 
    Local branch configured for 'git pull': 
    master rebases onto remote master 
    Local ref configured for 'git push': 
    master pushes to master (up to date) 
+0

你正在運行什麼push命令,以及你在本地有哪些分支? – Amber

+0

我在本地做主,並且正在運行'git push origin master:refs/for/master',並且使用有效的提取和推送URL來設置原點。 – edwardmlyte

+0

鑑於您使用'refs/for/...'而不是'refs/heads/...'語法,您使用的是Gerrit嗎?如果是這樣,那麼這與你的問題高度相關,應該提及。 – Amber

回答

45

此問題是由於我之前執行的操作。我正在嘗試push一個新的變化,除了需要審查的變化之外,誰的父母也在等待審覈。

Trunk ------ Parent A ----- Parent B ----- New change 
(merged)  (unmerged)  (unmerged) 

我用了cherry-pick本地(父和母B)獲得這兩個變化,然後是第三cherry-pick試圖push之前得到來自當地分公司的零錢。這就是導致這個問題的原因,因爲我個人的變化本質上是試圖重寫歷史。

正確的過程是在主幹時只有pull父母B.這會自動提取中繼和它之間的任何提交(在這種情況下,只是父A)。然後cherry-pick我的新變化,以及push將工作正常。

+8

今天我們遇到了一個問題。問題是我們在格雷裏: Change1(合併) - Change2(未合併) - Change3(未合併) 我們想要應用發佈一個新的補丁集到Change3,但它被拒絕。消息:''! (遠程拒絕)master - > refs/for/master(不做任何修改)''在我們頭腦發現後,我們發現我們已經在本地進行了rebased,並且Change2也收到了新的提交哈希,但沒有發生新的變化。我們通過在本地重新設置交互來解決它,並通過在提交消息的末尾添加一個字符來重寫Change2。之後,發佈很好。 – mortb

2

這聽起來像你正在做的一切是正確的就像驗證你已經改變了Gerrit應該選擇的那樣。

git push origin master:refs/for/master

也許這是什麼問題?如果您的更改不在主分支的本地版本上,則不會推送您的更改。相反,嘗試:

git push origin HEAD:refs/for/master

HEAD是表示當前在Git中提交的快捷方式。

+0

與該快捷方式相同的錯誤。 HEAD是指當前分支中的當前更改,還是僅指當前分支中的當前更改? – edwardmlyte

+1

HEAD表示您當前的更改週期。你所在的分支無關緊要。如果用HEAD推動不起作用,我懷疑你的修改沒有改變提交。嘗試在修改時更新/更改提交消息,然後再次按下。 – Brad

+0

感謝您的幫助布拉德,發現我一直在錯誤地使用git。 – edwardmlyte

2

如果您嘗試更新一組評論,每個評論都帶有您想要維護的自己的change-id(例如,在您交換兩次提交的順序之後進行rebase)之後,如果某些評論堆棧中的承諾保持不變。您應該強制通過重新提交提交或類似的東西來生成新的哈希。

+6

我不得不做一個「git commit --amend」而沒有改變,這似乎解決了我的問題。 – Stuart

0

我有同樣的問題。 與此同時,還有另一個提交沒有合併到主,並在gerrit審查和gerrit重新啓動。 即代碼推送審查。在gerrit重新審查和審查待完成。 一旦代碼被審查,我就能夠無誤地推送。

0

我有同樣的錯誤消息,但我試圖把變化是從原​​來的更改組不同的提交頂部(做了一些魔術技巧與git cherry-pick,似乎格里特不喜歡它)。我放棄了原來的修改,然後在意識到可以解決問題時重新打開它,但未能發送給gerrit並與git review

在這一點上,我快速的解決辦法是放棄從格里特網站原來的變化,並通過與git commit --amend去除提交信息的change-Id: sha1最後一行創建一個新的變化。

0

出現此錯誤消息如果推送的提交與此更改的當前補丁集相同,Gerrit拒絕將提交作爲新補丁集推送到更改中。

推送的提交被認爲是等同於如果

  • 在文件提交設置當前補丁,
  • 提交消息,
  • 的提交作者和
  • 的承諾的父母

都完全相同。

1

請參考官方文檔關於這個問題在這裏:

https://gerrit-review.googlesource.com/Documentation/error-no-new-changes.html

我有同樣的問題,我的問題是,我推了變化,然後放棄了合併,然後我做了一些調整,錯誤地修改了我的提交併再次推送。那是我得到錯誤的地方。

我的解決辦法:

  1. 如果你只是想解決此問題,迅速得到,也git commit --amend,刪除現有change-Id,假設你已經設置了git的鉤子,你可以完成提交和新change-Id應該分配給你。
  2. 進入gerrit並搜索您現有的change-Id,找出正在發生的情況並相應地進行修復。 (推薦)
相關問題