2011-04-14 67 views
10

我有一個遠程git存儲庫和本地工作。每當我在本地做任何更改時,我都會將它們推到遙控器上。然後,我有時會在遠程文件上執行「git commit」以將更改存儲在遠程文件中。爲什麼我得到「錯誤:無法推送一些裁判」?

我根本不直接編輯遠程存儲庫。我只是承諾修改。而且我是一名開發人員,沒有其他人在回購。

爲什麼我得到一個錯誤,據我所知,這意味着我必須先拉?

我不想拉,因爲遠程回購文件已過時,它會失去我的本地更改。這真的很煩人,爲什麼會這樣呢?我怎樣才能解決而不必拉或重新創建存儲庫? (你可以看到,這有點像一個顛覆式的這裏版本控制風格)

編輯 - 錯誤:

To ssh://... 
! [rejected]  master -> master (non-fast-forward) 
error: failed to push some refs to 'ssh://...' 
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. 
+0

你是什麼意思你在遠程倉庫上做一個「git commit」?遠程存儲庫是否是裸回購?你通常應該只是推銷一個裸回購,但你不能承諾一個裸回購,所以我有點困惑你想要做什麼。你能展示一個你正在運行的實際命令的例子和你得到的實際輸出嗎? – 2011-04-14 20:34:47

+0

好吧,我對這部分有點懷疑,這就是爲什麼我提及它。回購是用'git init'創建的。我在遠程存儲庫上做了一個提交,因爲我沒有看到那個存儲庫中的更改。我添加了代碼來顯示錯誤 – Spyros 2011-04-14 20:37:18

回答

11

什麼,你應該做的是創建遠程存儲庫作爲純倉庫。一個裸倉庫就是git repo,沒有當前的結帳(就是說,它就像是普通Git倉庫中.git目錄的內容,所以它包含對象和裁判,但它沒有索引或工作文件層次結構的副本)。如果嘗試推送到非裸存儲庫,工作副本將與提交的內容不同步,並導致您在此處看到的各種問題。

您可以使用git init --bare repo.git創建裸存儲庫。或者,您可以使用git clone --bare original-repo new-repo.git將現有存儲庫複製爲裸回購。

如果您想要在服務器上檢出存儲庫的副本,則需要在服務器上創建一個新的非裸回購,然後從您推入的裸回購庫中取回該回購。

+0

因此,如果我理解正確,這個想法就是裸倉庫就像一個索引,它具有表示已保存數據的內部方式,然後您只需克隆工作(或備份)副本。 – Spyros 2011-04-14 20:50:54

+0

+1你應該推到裸git存儲庫。 – 2011-04-14 20:52:17

+1

@SpyrosP基本上。裸倉庫僅存儲歷史記錄,分支和標籤,但沒有任何一種特定版本的工作副本,這是正常回購的方式。你可以克隆一個裸回購來創建一個正常的回購有一個工作副本,你做你的工作。 – 2011-04-14 20:53:44

6

這總是意味着你沒有同步與本地回購遠程倉庫,所以首先你應該用命令的git拉他們同步如下:

git checkout master  
git pull origin master 

這個過程後,你將它們同步,然後您可以通過以下方式將更改推送到遠程回購:

git add [filename/directory] 
git commit -m"input your message" 
git remote add origin https://github.com//yourname.git  
git push origin master 
5

這是另一種選擇。

git reset --mixed origin/master 
git add . 
git commit -m "Your message" 
git push origin master 
0

我面臨類似的問題,並且下面的命令奏效。 git push --set-upstream origin master

相關問題