Git-Grep搜索

Git-Grep搜索,git,Git,我试图比较Git项目的两个提交。我要做的是将存储库克隆到postfix文件夹,然后使用: git --grep=xxx 其中xxx是提交号,检索散列,然后对检索到的散列使用git checkout 但是,git grep只返回该特定提交的详细信息 例如,如果提交的ID为24,那么我检索ID为23的提交是否足够,以便获得没有修复程序的项目版本?要比较Git存储库的两次提交,只需使用: 要比较Git存储库的两次提交,只需使用: 要比较Git存储库的两次提交,只需使用: 要比较Git存储库的两次提交

我试图比较Git项目的两个提交。我要做的是将存储库克隆到postfix文件夹,然后使用:

git --grep=xxx
其中xxx是提交号,检索散列,然后对检索到的散列使用git checkout

但是,git grep只返回该特定提交的详细信息


例如,如果提交的ID为24,那么我检索ID为23的提交是否足够,以便获得没有修复程序的项目版本?

要比较Git存储库的两次提交,只需使用:


要比较Git存储库的两次提交,只需使用:


要比较Git存储库的两次提交,只需使用:


要比较Git存储库的两次提交,只需使用:


签出提交后,可以轻松返回到父提交(假设它只有一个父级):


签出提交后,可以轻松返回到父提交(假设它只有一个父级):


签出提交后,可以轻松返回到父提交(假设它只有一个父级):


签出提交后,可以轻松返回到父提交(假设它只有一个父级):

背景 我不确定您所说的那些ID是什么:Git提交没有任何顺序ID,只通过它们的SHA-1名称进行标识,SHA-1名称是在相应提交对象上计算的哈希值

所以我可能会假设您正在谈论一个嵌入一些外部生成ID的项目。一个原因可能是,这是一个遵循Subversion存储库的项目,因为默认情况下,在此类存储库中创建的所有提交都将在其消息中人工嵌入Subversion URL和修订ID

从中得到什么 第一件事:一般来说,您的问题的答案是否定的。原因是,如果是合并提交,任何Git提交都可能有多个父级。因此,考虑提交而仅仅后退(参见下面的方法)是不可能的

如何选择父提交? 手动页面列出了选择父提交之一的两种形式:

  • ^
    ,例如
    HEAD^
    v1.5.1^0

    修订参数的后缀
    ^
    表示提交对象的第一个父对象
    ^
    表示第
    个父项(即
    ^
    相当于
    ^1
    )。作为一项特殊规则,
    ^0
    表示提交本身,当
    是引用提交对象的标记对象的对象名时使用

  • ~
    ,例如
    master~3

    修订参数的后缀
    ~
    表示提交对象,它是命名提交对象的第
    代祖先,仅位于第一个父对象之后。也就是说,
    ~3
    相当于
    ^^
    ,后者相当于
    ^1^1
    。有关此表单的用法说明,请参见下文

正如您所看到的,Git要么强制您显式地指示父级,要么假定第一个(也是“左”)父级(这是已进行合并的父级)

因此,一旦您知道提交的SHA-1名称,就让它成为
2abcde45
,您可以使用
2abcde45^
2abcde45^1
2abcde45~1
来引用它的第一个父级,这些都与此任务相同


我想再次强调一个事实,Git提交没有您似乎正在使用的“ID”,因此请花时间真正了解您正在处理的ID。在这里发布另一个问题,这样引用一个示例提交的提交消息就可以了。

Background 我不确定您所说的那些ID是什么:Git提交没有任何顺序ID,只通过它们的SHA-1名称进行标识,SHA-1名称是在相应提交对象上计算的哈希值

所以我可能会假设您正在谈论一个嵌入一些外部生成ID的项目。一个原因可能是,这是一个遵循Subversion存储库的项目,因为默认情况下,在此类存储库中创建的所有提交都将在其消息中人工嵌入Subversion URL和修订ID

从中得到什么 第一件事:一般来说,您的问题的答案是否定的。原因是,如果是合并提交,任何Git提交都可能有多个父级。因此,考虑提交而仅仅后退(参见下面的方法)是不可能的

如何选择父提交? 手动页面列出了选择父提交之一的两种形式:

  • ^
    ,例如
    HEAD^
    v1.5.1^0

    修订参数的后缀
    ^
    表示提交对象的第一个父对象
    ^
    表示第
    个父项(即
    ^
    相当于
    ^1
    )。作为一项特殊规则,
    ^0
    表示提交本身,当
    是引用提交对象的标记对象的对象名时使用

  • ~
    ,例如
    master~3

    修订参数的后缀
    ~
    表示提交对象,它是命名提交对象的第
    代祖先,仅位于第一个父对象之后。也就是说,
    ~3
    相当于
    ^^
    ,后者相当于
    ^1^1
    。有关此表单的用法说明,请参见下文

正如您所看到的,Git要么强制您显式地指示父级,要么假定第一个(也是“左”)父级(这是已进行合并的父级)

因此,一旦您知道提交的SHA-1名称,就让它成为
2abcde45
,您可以使用
2abcde45^
2abcde45^1
2abcde45~1
来引用它的第一个父级,这些都是相同的
git diff commit1 commit2
$ git checkout HEAD^