如何显示基于先前提交的提交?

时间:2019-09-09 22:59:56

标签: git

我有一个旧的提交,我想选择另一个分支。但是,由于它是旧的提交,因此其中的错误可能已被最近的提交所修复。我知道它并不是完美无缺的,但是如果我能得到修改已添加代码的提交列表,那么很可能会捕获到任何此类更改。

自原始提交以来,我无法进行单个提交,因为它们太多了,但是我所描述的较小列表应该是可以管理的。

我要寻找的示例:

基础:

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的列表。

编辑:为了进一步澄清@O​​bsidianAge的评论,我将举一个摘樱桃的例子。

如果提交历史记录如下:

* 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之类的终端命令来实现。

1 个答案:

答案 0 :(得分:1)

如“ how do I view the change history of a method/function?”所示,您可以使用git log -L :<funcname>:<file>

这将有助于跟踪已修改特定功能的提交。