我有一个旧的提交,我想选择另一个分支。但是,由于它是旧的提交,因此其中的错误可能已被最近的提交所修复。我知道它并不是完美无缺的,但是如果我能得到修改已添加代码的提交列表,那么很可能会捕获到任何此类更改。
自原始提交以来,我无法进行单个提交,因为它们太多了,但是我所描述的较小列表应该是可以管理的。
我要寻找的示例:
基础:
void foo() {
//do something
}
在commit1之后:
void foo() {
//do something
}
bool bar() {
return true;
}
在commit2之后:
bool foo() {
//do something
return false;
}
bool bar() {
return true;
}
在commit3之后:
bool foo() {
//do something
return false;
}
bool bar() {
if (cond)
return false;
return true;
}
如果commit1是我感兴趣的旧提交,我应该得到一个包含commit3而不是commit2的列表。
编辑:为了进一步澄清@ObsidianAge的评论,我将举一个摘樱桃的例子。
如果提交历史记录如下:
* c470ee1 - commit3 (branch1)
* c65a8d0 - commit2
| * fe51fc2 - commitB (HEAD -> branch2)
| * 900ca02 - commitA
* | 607e2c7 - commit1
|/
* Base
然后Cherry-pick命令将为git cherry-pick 607e2c7
。但是,由于commit3是针对commit1的错误的修复程序,因此结果将是branch2现在包含了commit1的错误,但不包含针对此错误的修复程序。
由于commit3修改了commit1添加的3行代码块,因此应将其标记为相关。另一方面,commit2不会触及这3行,因此不应将其标记为相关。
我知道这不太可能使用git porcelain命令,但是我希望有一种方法可以通过组合git plumbing命令和/或sed之类的终端命令来实现。
答案 0 :(得分:1)
如“ how do I view the change history of a method/function?”所示,您可以使用git log -L :<funcname>:<file>
这将有助于跟踪已修改特定功能的提交。