2015-02-10 53 views
41

有沒有一種很好的方法來解釋如何解決Git中的「! [rejected] master -> master (fetch first)'」?! [拒絕]主 - >主(取第一個)

當我使用這個命令$ git push origin master它顯示一條錯誤消息。

! [rejected]  master -> master (fetch first) 
error: failed to push some refs to '[email protected]:zapnaa/abcappp.git' 
+0

同樣的問題:d – core114 2017-11-29 04:07:14

回答

50

答案就在那裏,git告訴你先取回。

也許其他人已經推到掌握了,你的承諾就落後了。因此,您必須獲取,合併變更集,然後才能再次推送。

如果您沒有(甚至更糟糕,如果您使用--force選項強制執行此操作),則可以搞亂提交歷史記錄。

編輯:我進入了最後一點的更多細節,因爲這裏的一個人剛給了使用--force選項的非常糟糕的建議。

由於git是一個DVCS,理想情況下許多其他開發人員正在使用相同的存儲庫(或其分支)與您在同一項目上工作。如果您用變更集強制覆蓋,那麼您的存儲庫將與其他人的配置不匹配,因爲「您重寫了歷史記錄」。你會讓其他人不滿,存儲庫會受到影響。世界上的小貓也許也會哭泣。

TL; DR

  1. 如果要解決,首先取(然後合併)。
  2. 如果您想破解,請使用--force選項。

不過你問過前者。儘管你會一直使用git,因此這是一個很好的習慣。

+0

無法獲取刪除本地文件的重要變化? – 2017-08-01 14:25:25

+0

它在提取後不會改變 – dhein 2017-08-17 12:41:00

+0

@dhein正如我寫的,提取後必須跟一個合併 - 關鍵是你必須「將」本地樹與遠程樹「對齊」(因此與合併) - 但是,謝謝,我把它寫在TL中; DR太 – linuxbandit 2017-09-17 12:12:07

3

試試這個混帳命令

git push origin master --force 

或短的力-f

git push origin master -f

+0

感謝@ user1865618,git push origin master --force。這個命令節省了我的時間 – 2017-04-21 12:25:52

+0

在閱讀其他答案後說:'不要這樣做,除非你知道你在做什麼'。 :-) – Zeth 2017-07-10 15:22:41

+0

這覆蓋了git推送限制。不建議用於團隊合作。從git推文檔:如果其他人在你重組之前建立在原始歷史的基礎之上,那麼遠程分支的頂端可能會隨着她的提交而前進,並盲目地用-force will_ **失去她的工作**。 – Casey 2017-10-04 09:57:25

16

你應該使用git pull,that's命令做一個git fetch和明年做git merge

如果您使用git push origin master --force命令,您可能在將來遇到問題。

+0

如果你只是項目中的唯一一個人,並且在嘗試第一次推動時感到沮喪,那麼你是否應該只使用--force? – Chrips 2017-10-20 04:29:16

6

pull始終是正確的方法,但有一個例外可能是當您嘗試將非Git文件系統轉換爲Github存儲庫時。在那裏你必須強制第一次提交。

git init 
git add README.md 
git add . 
git commit -m "first commit" 
git remote add origin https://github.com/userName/repoName.git 
git push --force origin master 
+0

適合我,我又開始了一個新項目(同樣的回購),我想替換它。 – ucotta 2017-06-02 18:46:36

15

嘗試:

git fetch origin master 
git merge origin master 

後,寫了這個代碼,我收到其他錯誤:(非快進)

我寫這篇文章的代碼:

git fetch origin master:tmp 
git rebase tmp 
git push origin HEAD:master 
git branch -D tmp 

而且解決了我的問題

+0

同樣適用於我。這解決了我的問題。有幾個警告。我搞砸了一個子庫,但解決它與此:http://stackoverflow.com/questions/19584255/what-does-a-grey-icon-in-remote-github-mean – 2017-01-10 16:17:04

+0

謝謝它爲我工作 – core114 2017-11-29 04:06:32

0

它'可能是其他人(例如,你的同事)已將提交到origin/master上,而這些提交併不在你本地的master分支中,而你試圖將一些提交從本地分支推送到服務器。在99%的情況下,假設您不想從origin中刪除他們的工作,您有兩種選擇:

2)將他們的更改合併到您的本地分支,然後推送合併的結果。 git checkout master git pull # resolve conflicts here git push

(注意git pull本質上只是一個git fetch,在這種情況下,git merge

1)調整基線您當地的分行,所以它看起來像你的同事提出了提交第一,然後你做了提交。這使得提交歷史很好,並且保持線性 - 並且避免了「合併提交」。但是,如果您與同事的更改發生衝突,則可能需要在最壞的情況下爲您的每個提交(而不是僅僅一次)解決這些衝突。從本質上講,對其他人來說更好,但對你來說更多的努力。 git pull --rebase # resolve conflicts here git push

(注意git pull --rebase本質上是一個git fetchgit rebase origin/master。)

0

有時,當你重複的文件通常README排序它發生。

0

您可以使用下面的命令: 首先克隆你的回購的全新副本,使用--mirror標誌:

$ git clone --mirror git://example.com/some-big-repo.git 

然後遵循相應代碼:

Adding an existing project to GitHub using the command line

即使不起作用,您也可以簡單地編碼:

$ git push origin master --force 

$ git push origin master -f 
相關問題