12

Git 分支头和标签是提交的指针,这些指针可以隐式移动(在 a 之后commit)或显式(在 a 之后branch -m)移动。

Git 会记录这些指针的状态历史吗?

我认为至少有两个原因:

  • 看两天前 repo 的状态,包括分支头指向的地方。
  • 确保不会因为有人以某些提交变得无法访问的方式移动分支头而丢失历史记录。

请注意,上述在 Mercurial 中是可能的,因为它将分支名称存储在每个提交中。

再说一遍,在 Git 中,.git/refs/ 的内容是受版本控制的,还是有办法让它们如此?

(我正在尝试为团队决定使用 Mercurial 还是 Git,并且我想确保记录对共享存储库的所有更改,包括引用。我不在乎开发人员对他们的私有存储库做了什么。)

谢谢你。

4

3 回答 3

9

它们没有版本控制,但reflog功能保留了本地历史记录,您可以使用它来撤消错误。但是,如果有人“倒回”一个分支头以从最后丢弃一些提交,那么当另一个开发人员尝试更新他们对该分支的签出时,它会立即变得显而易见,因为除非--force使用 Git,否则 Git 将拒绝在本地进行该更改。此时您可以轻松地将提交推送回共享存储库。

于 2011-05-07T02:52:39.173 回答
4

有两种方法:

git reflog

和:

git log -g

等价于第一种情况:

git log --oneline -g
于 2017-06-21T11:37:18.103 回答
2

Gerrit 等企业 Git 服务器的扩展可以对您的分支历史记录进行版本控制。如果一个分支以非快进方式(push -f)被删除或更新,它将在一个特殊的 ref 下支持以前的版本,以便在需要时可以恢复它们并且不会被垃圾收集修剪。如果出于法律原因需要,Gerrit 管理员仍然可以删除选定的提交。

于 2013-01-07T17:25:11.997 回答