gpt4 book ai didi

git - merge pull 请求后 git 标签会发生什么

转载 作者:行者123 更新时间:2023-12-04 02:11:38 25 4
gpt4 key购买 nike

如果你有一个像这样的 git 提交树会发生什么:

A-B-C-D          D <-- v0.9 (tag)

并且您接受了一个 pull 请求,该请求的更改早于先前标记的提交;标签现在会包含来自 merge pull 请求的提交吗?

A-F-B-G-C-D      D <-- ? v0.9 (tag)

最佳答案

在git中,tag指向具体的commit对象。如果您实际上已经执行了 git pull --rebase,那么您的图表将如下所示:

A-B-C-D

A-F-B'-G-C'-D'

实际的提交对象取决于树的状态和出身,因此即使从 C 到 D 的差异与 C' 和 D' 之间的差异完全相同,它们也是不同的提交对象。

所以你的问题的答案是 v0.9 标签在第一次创建标签时总是指向 D 的版本。因此,如果您重写了历史记录,您将拥有一个标记,该标记指向一个已不在当前分支的树中的提交。

但是,如果您的意思是有人在您推送 B C 和 D 之前提交并推送到分支 F B G 和 C,那么会发生什么将取决于您在执行所需的 pull 操作时是进行 merge 还是 rebase 使用现有历史记录更新您的本地分支。

默认是 merge 。这将使您的图形看起来像这样:

A-F-B-G-C
\ \
B-C-D---M

你的分支头将指向 M,而树的每个分支中的 B 和 C 将是不同的(即使你们都从其他地方挑选了相同的提交)。

更新

tl;博士:

  • 谁先提交(时间)并不重要:顺序取决于图表和您组合和/或更改图表的选项( merge 、 rebase 、挑选)。您决定最终结构的样子。
  • 提交对象(标签指向的东西)永远不会改变,所以你标记的提交不会更新
  • 由于提交不会改变,当重写历史时,您实际上拥有 提交对象,即使差异相同。看起来事情正在发生变化,但实际上它们在图表中被看起来非常相似的东西所取代。

关于git - merge pull 请求后 git 标签会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16640224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com