gitpython使用分离的头获取最后一次提交
在最新的存储库中,我们执行以下操作:gitpython使用分离的头获取最后一次提交,git,gitpython,git-detached-head,Git,Gitpython,Git Detached Head,在最新的存储库中,我们执行以下操作: git签出头~5 然后使用GitPython,我们可以获得headcommit,它是分离的: 导入git repo=git.repo(‘.) 头=回购头 head\u commit=head.commit 打印(磁头已分离) >真的 在GitPython中是否有方法获取分支中的最后一次提交? 我在想一些大致如下的事情: last=repo.active_branch.last_commit#分离磁头时,active_branch将抛出错误。 或 las
git签出头~5
然后使用GitPython,我们可以获得headcommit,它是分离的:
导入git
repo=git.repo(‘.)
头=回购头
head\u commit=head.commit
打印(磁头已分离)
>真的
在GitPython中是否有方法获取分支中的最后一次提交?
我在想一些大致如下的事情:
last=repo.active_branch.last_commit#分离磁头时,active_branch将抛出错误。
或
last=head\u提交
#我甚至不知道在git中谈论儿童犯罪是否有意义。
虽然last.child不是无:
last=last.child
任何分支中的最后一次提交由存储在分支名称中的提交哈希ID给出
就这么简单。Git只向后提交链接,从子级到父级。因此,每个分支名称必须存储其上次提交的哈希ID
在最新的存储库中,我们执行以下操作:
git checkout HEAD~5
这样做之后,正如你在标题中所说,你有了一个“超脱的头”。这意味着您不再在任何分支上。“最后一次提交”的问题变得毫无意义:HEAD
直接指向提交,根据定义,该提交就是当前提交。您可以签出任何您喜欢的提交,例如,通过给git checkout
一个原始提交散列ID,您将继续在分离的头上,但在不同的提交上
其效果是,您现在处于一个匿名分支(没有名称的分支)上,其最后一次提交是当前提交。此时创建一个指向此提交的新分支会导致该分支存在。它的最后一次提交是当前提交,因此现在新创建的分支上的最后一次提交是当前提交
给定一系列提交,如:
... <-F <-G <-H <-I <-- br1
\
J <-K <-- br2
请注意,HEAD
现在连接到分支br1
。提交L
是此分支中的最后一次提交;通过I
的提交在两个分支中
如果现在拆下头部
并将其移动到提交I
,您将得到:
L <-- br1
/
... <-F <-G <-H <-I <-- HEAD
\
J <-K <-- br2
我想我明白了。由于git历史是一棵树,一次提交有一个父级,但可能有0到多个子级。但是孩子们的信息并没有被存储,只有父母、这棵树的叶子(每个分支)和一些其他中间指针(比如我们分离的头)。你的问题的答案是:1。通过从
K
开始,我们可以迭代地获取提交的父级,将哈希推到堆栈中,然后继续,直到到达F
的哈希。然后G
的散列将在堆栈中。2.我们需要在这两个分支中的任何一个分支中的另一个提交来执行anwser(1.)正确的进程。请注意,尽管合并提交有两个(或更多)父级,但这使事情变得复杂:您必须沿着两个父级链接向后走。(合并将数据结构从树更改为图—Git中的有向无环图。对于您的特定情况,您可能不需要担心合并提交。)
L <-- br1
/
... <-F <-G <-H <-I <-- HEAD
\
J <-K <-- br2