Git cherry pick创建blob而不是提交?
几个月前添加的一项功能出现了倒退。该功能是在三个单独的提交中引入的。为了恢复功能,我想Git cherry pick创建blob而不是提交?,git,tags,diff,Git,Tags,Diff,几个月前添加的一项功能出现了倒退。该功能是在三个单独的提交中引入的。为了恢复功能,我想git cherry pick将三个提交添加到一个分支上(rel060),该分支是从提交合并到生产中之前的最后一个标记(rel060.6.0版)创建的,由git descripe表示 完成后,我想将此操作的结果与当前生产头上的文件内容进行比较 git co -b rel060 release-0.6.0 git cherry-pick ead47f2 [rel060 f28fed4] Corrects no
git cherry pick
将三个提交添加到一个分支上(rel060),该分支是从提交合并到生产中之前的最后一个标记(rel060.6.0版)创建的,由git descripe
表示
完成后,我想将此操作的结果与当前生产头上的文件内容进行比较
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\u lp\ux上标记自动完成。。。已生成:不是有效的对象名称rel060:。
函数
文件是一个文件,其内容后来被转入lpgenerate
现在,我意识到有一百万种更简单的方法来做我想做的事情(将三个提交视为一个diff,diff标记将特性释放到所讨论的行的当前状态)
我想知道的是:为什么我会出现特定的错误?事实证明,采摘樱桃似乎与问题无关。从标记创建分支后尝试diff会产生相同的错误。我是否错过了git中的一些基础知识?从发布中创建分支似乎是无害的。。。是否存在一些我没有注意到的无害问题?原因是
git diff..
的存在只是为了保持向后兼容性,在语法上是“错误的”
git diff A..B“一开始说起来是不合逻辑的。它
只有在历史上偶然发生的情况下才能工作,为此“它使用了
要从一开始就这样工作,不要倒退
“兼容性”的原因,我们一直保持它的工作
但你最好还是放弃学习,这样你才能保持清醒
作为新用户学习git
点表示法是关于一个范围的。a..B是关于一组
是B的祖先但不是A的祖先的提交
$ git log A..B
显示这样的范围是非常有意义的
但是“diff”是关于“比较两个端点”,什么都没有
“范围”是关于这样一个比较的。当你在
在B,你甚至不看中间的任何东西,这就是为什么
用规范的方式说它是
$ git diff A B
而不是
$ git diff A..B ;# WRONG. DO NOT DO THIS.
And:是在树中命名实体的一种方法
记录在中。通常您命名一个blob,而不是树
表示子目录的,使用以下语法
现在,B1..B2,当B1和B2是斑点(或任何不是斑点的东西)时
提交(ish),即使作为范围也没有意义,这样的请求
被检测为语法级别的错误(即,没有
开始“比较”)
如果要比较两个blob,可以使用canonical
“比较两件事”语法
Junio C.Hamano的回答,viagit@vger.kernel.org
git rev parse release-0.6.0
说了什么(以及rel060
和production
)?什么是git co
(我猜它是git checkout
的别名,但值得检查)?看起来您似乎以某种方式创建了指向blob而不是提交的标记/分支,但这肯定是不寻常的…git rev parse release-0.6.0 533ccfa06697c6e60fde24f1d4a631d3505cc
git rev parse production 5bacdbaf5e5fefa7d915f384e81f9152b7dcefgit rev parse rel060 34dbae8565c45834ab4bCA7CBAD49082F26077Yes,git checkout的别名git show
Trygit diff rel060:./cron_lp_functions.php production:./cron_db_lpgenerate.php
(两个对象之间没有。
)。就是这样!谢谢你的帮助。我没有意识到跨分支文件比较的语法不同于两次提交之间的语法。是的,我自己刚刚运行了一个测试,git diff
似乎可以使用git diff..
,但不能使用git diff:..
。对于这种情况,两个规范似乎需要单独的参数。Mig值得将其作为缺陷/缺陷报告。
$ git diff HEAD:Makefile..HEAD~4:Makefile ;# WRONG. DO NOT DO THIS.
$ git diff HEAD:Makefile HEAD~4:Makefile