2014-07-07 196 views
3

目的:刪除名爲 '分支名稱'混帳:推刪除分支遠程

我以前做的步驟是一個遠程分支:[第一種方法]

  1. 的Git分支-d BRANCHNAME
  2. 混帳推產地:BRANCHNAME

今天我試着用上述同樣的刪除步驟,但遇到了一個問題,下面所提到:

$ git branch -d branchname 
warning: deleting branch 'branchname' that has been merged to 
     'refs/remotes/origin/branchname', but not yet merged to HEAD. 
Deleted branch branchname (was f394ddc). 
prash ~/folder/project1 (branch1) 
$ git push origin branchname 
Enter passphrase for key '/c/Users/prash/.ssh/id_rsa': 
error: src refspec branchname does not match any. 
error: failed to push some refs to 'ssh://[email protected]/projname.git' 

最後我能夠通過不同的方式來刪除,[第二種方法]

$ git push origin --delete branchname 

問題,

你知道爲什麼我不能按照第一種方法刪除遠程分支? 另外,爲什麼警告?

編輯:

我試圖通過創建和刪除遠程分支,和我做了這個時間,我早錯過了分支名稱前添加一個冒號唯一的變化複製第一個問題,它得到了刪除。不知道這是否是之前的原因。

+3

是的,'git push origin:branchname'中的冒號很重要。事實上,它實際上推動分支,'git push origin branchname',這就是爲什麼'--delete'命令行標誌被創建的原因。 – tbekolay

+0

哦,我沒有注意到,我真的試圖推動分支,我得到了錯誤bcoz我已經在當地刪除了分支。所以使用第二種方法總是更好。謝謝..你知道我爲什麼會得到有關HEAD的初步警告嗎?它怎麼知道我沒有合併HEAD?你也可以請回答作爲答覆 – spiderman

回答

4

在你的第一個例子,爲什麼推失敗的原因是因爲你做的

git push origin :branchname 

結腸是顯著

git push origin branchname 

代替;這是推送分支和刪除分支之間的區別。這裏的一個字符差異是爲什麼git push origin --delete branchname通常是一個更安全的命令。

既然你已經刪除branchname,當你試圖推動它,git說:「我不知道branchname是什麼,因爲我沒有使用該名稱的分支」,並沒有任何推動。

你可能會想,刪除分支機構本地只是標誌着分支爲「已刪除」,所以當你按下它,的origin版本的branchname也被標記爲‘已刪除’,但是這並不怎麼git刪除分支。當你在本地刪除分支時,分支將永遠消失(雖然屬於該分支的提交仍然存在,因此您可以通過查看git reflog來恢復它)。


至於最初的警告有關HEADgit正在努力,以確保不會丟失任何數據。

每個分支都可以有一個與其關聯的「上游」分支,因此您可以使用git pushgit pull而不必指定明確的遠程分支和顯式分支。當您刪除分支時,git將檢查上游分支以查看您的本地分支是否存在遠程上游分支中不存在的提交。你不會因爲刪除一個與遠端相同的分支而丟失任何數據,因爲你可以再次檢查它。如果您刪除了一個包含未上傳提交的分支,則可能會丟失數據,因此git會嘗試通過警告您如果使用未提交的提交來刪除分支來幫助您。

這只是一個警告,因爲有很多情況下你不關心一些提交。他們本來可能是實驗失敗,合併分支的非重新版本或其他合法情況。

+0

非常感謝你的詳細的答案。很好解釋。 – spiderman

+0

對於'--delete'建議+1。 –