gpt4 book ai didi

git - Git 中的 "stateful"是如何 rebase 和 merge 的?

转载 作者:太空狗 更新时间:2023-10-29 13:51:37 27 4
gpt4 key购买 nike

也许我想多了,但有人可以详细说明以下声明吗?

Counterintuitively, rebases and merges are stateful, and git can cede control back to you before a merge/rebase is finished.

经过简短的回顾state ,我相信这与由串行(顺序)步骤组成的 rebase 和 merge 有关,其中每个步骤都是一个原子更改,因此可以回滚。这样对吗?有人可以更好地解释这一点,为什么这是违反直觉的?如果 rebase 和 merge 不是有状态的,它们会是不可逆的吗?

最后,rebase 和 merge 是否只在 Git 中是有状态的?

最佳答案

这意味着 git 将状态信息存储在 .git 目录中,用于跟踪它正在做什么。

查看 merge 类型 git merge --no-commit <some branch>然后 ls -l .git您将看到文件 MERGE_HEAD、MERGE_MODE 和 MERGE_MSG 已创建。提交 merge 后,这些文件将被删除。

对于 rebase ,只需执行类似 git rebase -i HEAD~1 的操作,并将任何行从“选择”更改为“编辑”。当 git 将控制权交还给你时,做 ls -l .git你会看到有一个 .git/rebase-merge 目录创建了一大堆文件,包括仍然要执行的 rebase 操作列表。 git rebase --abort (或者当 rebase 自行结束时)这些文件将被删除。

我不知道为什么说这话的人认为这些具有状态的操作是违反直觉的。如果您通过 rebase 一次分块提交,则必须在某处存储一个“待办事项”列表。如果你正在 merge ,你必须知道 SHA 中的 merge 是什么,所以你除了 HEAD 之外还要提交它。

关于git - Git 中的 "stateful"是如何 rebase 和 merge 的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26030644/

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