Git承诺父母的命令

Emi*_*yan 7 git libgit2 pygit2

提交的父母的顺序是否有一些约定?

因为提交的父项之一应该是当前正在合并的当前分支上的提交,其余的是其他合并分支的先前提交.

我想确定当前分支的先前提交,我正在使用pygit它返回一个提交的父母列表,直觉上我认为父母的顺序可能有意义,但我没有发现明确提到这一点.


我编写了这个实用程序函数,使用第一个父提交来遍历分支:

def walk_branch(pygit_repository, branch_oid):
    """
    Walk a single branch
    """
    from pygit2 import GIT_SORT_TOPOLOGICAL
    previous_first_parent_oid = None
    for commit in pygit_repository.walk(branch_oid, GIT_SORT_TOPOLOGICAL):
        if previous_first_parent_oid is None or commit.oid == previous_first_parent_oid:
            previous_first_parent_oid = commit.parents[0].oid if len(commit.parents) else None
            yield commit
Run Code Online (Sandbox Code Playgroud)

mic*_*has 8

是的,如果将A合并到B中,则第一个父项为B,第二个项目为A.

因此,您可以执行以下操作gitk --first-parent:仅显示当前分支的历史记录,而不显示合并分支的详细信息.


Car*_*eto 7

libgit2并且它的绑定按照它们存储在提交中的顺序返回git merge父节点,这是它们在例如命令行上给出的提交顺序,并且它是第一个父节点是当前提交时的常量.创建一个新的(通过合并或正常git commit).

为了识别提交先前提交(及时),您需要做的就是查看第一个父级.它们是否在同一个分支中并不是你可以从中看到的东西,因为提交父级可能位于不同的分支中(这是导致分支的原因),但是你可以绘制一条直线(如那些git log --graph --oneline绘制).