2012-10-09 92 views
1

幾個月前加入的功能出現了迴歸。該功能是在三個獨立的提交中引入的。爲了恢復我想git cherry-pick的三個提交功能到從最後一個標記(釋放0.6.0)所做的提交到生產合併前,由git describe表示創建一個分支(rel060)。Git櫻桃挑選創建blob不提交?

這樣就完成了,我想這個操作的結果進行比較,以文件對目前的生產頭上的內容。

git co -b rel060 release-0.6.0 
git cherry-pick ead47f2 
    [rel060 f28fed4] Corrects non-display of subtabs. (SITE-657) 
    1 files changed, 5 insertions(+), 8 deletions(-) 
git cherry-pick b22c4d4 
    [rel060 b0014f1] Correct subtab bug in Firefox/IE. (SITE-657) 
    1 files changed, 18 insertions(+), 24 deletions(-) 
git cherry-pick ae5a321 
    [rel060 5b41410] Corrects bug with subtab line collapse. (SITE-657) 
    1 files changed, 5 insertions(+), 1 deletions(-) 
git diff rel060:./cron_lp_functions.php..production:./cron_db_lpgenerate.php 
    error: Object 2ce3dd45e32e1bef6da0b22a9ee7208c63e203d2 is a blob, not a commit 
    error: Object f41574b41b82aba51876b5f7aba0d3ff9c6677c5 is a blob, not a commit 
    fatal: Invalid revision range rel060:./cron_lp_functions.php..production:./cron_db_lpgenerate.php 

對於它的價值,試圖在cron_lp生產標籤自動完成_...:Not a valid object name rel060:.

functions文件,其內容後來被軋到lpgenerate文件。

現在,我知道有一百萬更容易的選擇做我想做的事(見三個提交作爲一個DIFF,DIFF標籤釋放功能有問題的線路的當前狀態)。

我想知道這是:爲什麼我得到特定的錯誤?事實證明,櫻桃採摘似乎與問題無關。從標籤創建分支後嘗試diff會產生相同的錯誤。我在git中錯過了一些基本的東西嗎?從發佈版本創建分支似乎是無害的......有沒有一些無害的陷阱我沒有采取?

+0

這是什麼混帳'REV-解析釋放,0.6.0'說(也爲'rel060'和' production')?什麼是'git co'(我猜這是'git checkout'的別名,但值得檢查)?它幾乎看起來像你已經創建了標記/分支指向blob而不是提交,但這肯定是不尋常的...... – twalberg

+0

'''git rev-parse release-0.6.0 533ccfa0660697c6e60fde24f1d4a631d35055cc''' '''git REV-解析生產5baacdbafb5e5fefa7d915f384e81f9152b7dcef''' '''git的REV-解析rel060 34dbae8565c445834ab4bca7cbad490828f26077''' 是,別名'''混帳checkout''' 所有的決心,實際提交時,我'''混帳show' '' – kayaker243

+1

嘗試'git的差異rel060:./ cron_lp_functions.php生產:./ cron_db_lpgenerate.php'(不'..'兩個對象之間)。 – twalberg

回答

1

這樣做的原因是git diff <commit>..<commit>的存在只是爲了保持向後兼容,與語法「錯誤」。

git的差異A..B「是一個不合邏輯的事情擺在首位的說,它 只是發生的歷史事件的工作,並說:」它曾經 像這樣從一開始工作,做不落後打破 兼容性」的原因,我們一直能夠正常工作。

但是你最好忘掉它來保持自己的清醒時 學習git的新用戶。

點符號是關於一個範圍。 A..B討論了一組 提交的祖先B的B而不是A的祖先。

$ git log A..B 

對於顯示這樣的範圍是非常有意義的。

但「差異」是關於「比較兩個端點」。關於這樣的比較沒有任何「範圍」。當您比較A 和B的狀態時,您甚至不會看到兩者之間的任何內容。這就是爲什麼 規範的辦法可以說是

$ git diff A B 

,而不是

$ git diff A..B ;# WRONG. DO NOT DO THIS. 

和:是一種在記錄在樹 命名的實體。通常你用這個語法來命名一個blob,而不是代表一個子目錄的樹 。

現在,B1 ..B2,B1時和B2是斑點(或任何不 提交-ISH),沒有意義甚至作爲一個範圍,並且這樣的請求 被檢測爲在句法電平的誤差(即,甚至沒有 開始「比較」)。

$ git diff HEAD:Makefile..HEAD~4:Makefile ;# WRONG. DO NOT DO THIS. 

如果要比較兩個斑點,你可以用經典 「比較兩個事物」語法這樣做。

$ git diff HEAD:Makefile HEAD~4:Makefile 

從JUNIO C.濱野答案,通過[email protected]