gitpython 获取分离头的最后一次提交
gitpython get last commit with detached head
在最新的存储库中,我们执行以下操作:
git checkout HEAD~5
然后使用GitPython,我们可以获得head提交,它是分离的:
import git
repo = git.Repo('.')
head = repo.head
head_commit = head.commit
print(head.is_detached)
> True
GitPython有没有办法获取分支中的最后一次提交?
我正在考虑以下内容:
last = repo.active_branch.last_commit # active_branch will throw an error when head is detached.
或
last = head_commit
# I dont even know if talking about child commits makes sense in git.
while last.child is not None:
last = last.child
any 分支中的最后一次提交由存储在分支名称.
中的提交哈希 ID 给出
就是这样——真的就是这么简单。 Git 仅 向后 提交 link,从 child 到 parent。所以每个分支名称必须存储其最后提交的哈希ID。
In a up-to-date repository we do the following:
git checkout HEAD~5
完成此操作后,如标题中所述,您将拥有一个“分离的 HEAD”。这意味着您不再在任何分支。 “最后一次提交”的问题变得毫无意义:HEAD
直接指向一个提交,而该提交根据定义是 current 提交。您可以检查您喜欢的任何提交,例如,通过给 git checkout
一个原始提交哈希 ID,您将继续处于分离的 HEAD 上,但在不同的提交上。
效果是您现在位于一个匿名分支(没有名称),其 last 提交是 current 提交。此时创建一个新分支,指向这个提交,导致该分支出现。它的最后一次提交是当前提交,所以现在新创建的分支上的最后一次提交是当前提交。
给定一系列提交,例如:
... <-F <-G <-H <-I <-- br1
\
J <-K <-- br2
所有 到 I
的提交都在 br2
,即使 I
也是 最后 br1
的提交,这样通过 I
的所有提交都在 br1
上。他们在两个分支。提交 J
和 K
仅 br2
。
如果我们删除 name br1
,所有提交都可以通过名称 br2
继续找到。 Git 通过从(所有)分支名称和其他此类名称中读取每个哈希 ID 来查找(所有)提交,然后从这些提交向后工作到它们的 parents,再到 parents ' parents,依此类推。
如果此时您 git checkout br1
并创建一个新的提交,您将得到:
L <-- br1 (HEAD)
/
... <-F <-G <-H <-I
\
J <-K <-- br2
请注意 HEAD
现在附加到分支 br1
。 Commit L
是该分支的最后一次提交;通过 I
的提交在两个分支中。
如果您现在分离 HEAD
并将其移至提交 I
,您将得到:
L <-- br1
/
... <-F <-G <-H <-I <-- HEAD
\
J <-K <-- br2
练习(按顺序进行)
我会给你两个原始提交哈希 ID,前提是第一次提交的哈希 ID 可以通过从第二次提交开始并向后走,沿着这些一次一步 backward-pointing箭头。例如,我可能会给你提交 F
的哈希 ID 和提交 K
的哈希 ID。您如何使用此信息来查找提交 G
? (考虑从提交 K
开始并跟随每个箭头,同时保留每次访问的提交的某种日志。)
什么是下一个提交之后I
?为了找到下一次提交,您还需要哪些其他信息?请记住,提交 I
在 br1
和 br2
上。
在最新的存储库中,我们执行以下操作:
git checkout HEAD~5
然后使用GitPython,我们可以获得head提交,它是分离的:
import git
repo = git.Repo('.')
head = repo.head
head_commit = head.commit
print(head.is_detached)
> True
GitPython有没有办法获取分支中的最后一次提交?
我正在考虑以下内容:
last = repo.active_branch.last_commit # active_branch will throw an error when head is detached.
或
last = head_commit
# I dont even know if talking about child commits makes sense in git.
while last.child is not None:
last = last.child
any 分支中的最后一次提交由存储在分支名称.
中的提交哈希 ID 给出就是这样——真的就是这么简单。 Git 仅 向后 提交 link,从 child 到 parent。所以每个分支名称必须存储其最后提交的哈希ID。
In a up-to-date repository we do the following:
git checkout HEAD~5
完成此操作后,如标题中所述,您将拥有一个“分离的 HEAD”。这意味着您不再在任何分支。 “最后一次提交”的问题变得毫无意义:HEAD
直接指向一个提交,而该提交根据定义是 current 提交。您可以检查您喜欢的任何提交,例如,通过给 git checkout
一个原始提交哈希 ID,您将继续处于分离的 HEAD 上,但在不同的提交上。
效果是您现在位于一个匿名分支(没有名称),其 last 提交是 current 提交。此时创建一个新分支,指向这个提交,导致该分支出现。它的最后一次提交是当前提交,所以现在新创建的分支上的最后一次提交是当前提交。
给定一系列提交,例如:
... <-F <-G <-H <-I <-- br1
\
J <-K <-- br2
所有 到 I
的提交都在 br2
,即使 I
也是 最后 br1
的提交,这样通过 I
的所有提交都在 br1
上。他们在两个分支。提交 J
和 K
仅 br2
。
如果我们删除 name br1
,所有提交都可以通过名称 br2
继续找到。 Git 通过从(所有)分支名称和其他此类名称中读取每个哈希 ID 来查找(所有)提交,然后从这些提交向后工作到它们的 parents,再到 parents ' parents,依此类推。
如果此时您 git checkout br1
并创建一个新的提交,您将得到:
L <-- br1 (HEAD)
/
... <-F <-G <-H <-I
\
J <-K <-- br2
请注意 HEAD
现在附加到分支 br1
。 Commit L
是该分支的最后一次提交;通过 I
的提交在两个分支中。
如果您现在分离 HEAD
并将其移至提交 I
,您将得到:
L <-- br1
/
... <-F <-G <-H <-I <-- HEAD
\
J <-K <-- br2
练习(按顺序进行)
我会给你两个原始提交哈希 ID,前提是第一次提交的哈希 ID 可以通过从第二次提交开始并向后走,沿着这些一次一步 backward-pointing箭头。例如,我可能会给你提交
F
的哈希 ID 和提交K
的哈希 ID。您如何使用此信息来查找提交G
? (考虑从提交K
开始并跟随每个箭头,同时保留每次访问的提交的某种日志。)什么是下一个提交之后
I
?为了找到下一次提交,您还需要哪些其他信息?请记住,提交I
在br1
和br2
上。