Git cherry-pick会创建不提交的blob吗?

时间:2012-10-09 17:11:37

标签: git tags diff

几个月前添加的功能出现了回归。该功能在三个单独的提交中引入。为了恢复我想要git cherry-pick的功能,将三个提交放到从提交合并到生产之前的最后一个标签(release-0.6.0)创建的分支(rel060)上,由{{1表示}}。

完成后,我想将此操作的结果与当前生产头上的文件内容进行比较。

git describe

对于它的价值,尝试在cron_lp _...生成标签自动填充: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

Not a valid object name rel060:.文件是一个文件,其内容后来被载入functions

现在,我意识到有一百万个更容易的替代方法可以做我想做的事情(将三个提交视为一个差异,将标记释放到相关线条的当前状态)。

我想知道的是:为什么我会遇到特定的错误?事实证明,樱桃采摘似乎与问题无关。从标记创建分支后尝试diff会产生相同的错误。我是否错过了git中的基本内容?从一个版本创建一个分支似乎是无害的...是否有一些我无法接受的无害的问题?

1 个答案:

答案 0 :(得分:1)

原因是git diff <commit>..<commit>仅存在以保持向后兼容性并且在语法上“错误”。

  

git diff A..B“首先说的是一个不合逻辑的东西。它   只是偶然发生在历史事故中,而且“它用过了   从一开始就这样工作,不要向后突破   兼容性“原因,我们一直在努力。

     

但你最好不要学习它以保持理智   学习git作为新用户。

     

点符号是一个范围。 A..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是blob(或任何不是   commit-ish),即使作为范围和这样的请求也没有意义   被检测为句法层面的错误(即没有偶数   开始“比较”)。

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

如果你想比较两个blob,你可以用规范来做   “比较两件事”语法。

$ git diff HEAD:Makefile HEAD~4:Makefile

Junio C. Hamano的回答,来自git@vger.kernel.org