我在尝试推送时收到的错误表明我参考了'git push --help'中的'关于快进的说明'
本说明包含段落
当更新改变一个曾经指向提交A指向另一个提交B的分支(或更多通常是一个ref)时,当且仅当B是A的后代时,它才被称为快进更新。
我猜“更新”意味着对我所做的代码的更改以及这些更改将在我当前的分支中(因此我有一个更改的分支)但是它的意思是什么“(或更多)一般,参考)“?
中找不到“ref”这个词我可以在.git目录中看到名为“refs”的文件夹
什么是参考?
答案 0 :(得分:4)
以
refs/
开头的名称(例如refs/heads/master
),指向object name或其他参考...
请注意,分支名称(如master
)只是以refs/heads/
开头的引用(引用)。标签都以refs/tags/
开头。所以 reference 是一个通用的表单,它涵盖了分支名称,标记名称和更多名称。
我猜“更新”意味着对我所做的代码的更改...
(强调我的)
否:这里的想法是像分支名这样的引用包含提交哈希;正在更新的内容是包含的哈希值。如果refs/heads/master
现在包含ID 932b573406fda922d8edbecb0d7f9ad3ce9155ec
,并且您要求Git将其更新为包含d35688db19c9ea97e9e2ce751dc7b47aee21636b
,那么Git可以检查提交932b573406fda922d8edbecb0d7f9ad3ce9155ec
是否为提交d35688db19c9ea97e9e2ce751dc7b47aee21636b
的祖先。如果是这样,此更新是快进的。
每次提交都是纯快照。 Git不会比较提交快照内容,除非并且直到您要求它这样做。大多数情况下,它会查找commit graph ,它是通过将每个提交节点(由其哈希ID标识)连接到其父节点(由其哈希ID标识)而形成的。
答案 1 :(得分:4)
Ref 基本上是 Git 的机制来表示分支、对象的 id(也称为对象名称)、标签等,甚至是另一个 ref(称为符号引用)
来源: https://www.atlassian.com/git/tutorials/refs-and-the-reflog https://git-scm.com/docs/gitglossary