假设我有一个git存储库,我从不提交更改,只使用它读取的内容。每隔一段时间,我就会从源远程获取最新的更改。
是否有一种方法可以让我知道自从我克隆存储库以来我已经签出了哪些版本?
我为什么需要这个?
我的问题是我很少从远程拉,项目发展得很快,所以我想跟踪我过去使用过的提交(即签出),如果我想将我的工作目录恢复到我知道它为我工作的状态。请记住,我只对我实际签出的提交感兴趣。
更新:看起来我可以用标签做到这一点(标签之前我拉),虽然我不能弄清楚如何让git只列出我的标签。尽管如此,我还是想知道git是否已经为我记录了我签出的提交
您可以使用reflog进行此操作,但只能使用其限制(有时会被清除)。例如—在本地克隆msysGit上的快速测试:
$ git log -g --oneline --abbrev-commit --grep-reflog "pull:"
53e28dd HEAD@{7}: pull: Fast-forward
947ccf6 HEAD@{9}: pull: Fast-forward
6bf64a4 HEAD@{10}: pull: Fast-forward
20344ae HEAD@{15}: pull: Merge made by the 'recursive' strategy.
31dd6ff HEAD@{36}: pull: Fast-forward
b4546cc HEAD@{37}: pull: Fast-forward
fd6f8d0 HEAD@{38}: pull: Fast-forward
4fc3780 HEAD@{41}: pull: Fast-forward
这显示了我在过去几个月里碰巧在这个系统上做了'pull'的提交id。git log -g
是git reflog
的更详细的版本。
如果你只做一个git log -g
,你可能会在提供的集合中看到更合适的选择。结帐可能对您有用。
引用@{-<n>}
(例如@{-1}
, @{-2}
等)将在当前签出之前告诉您已签出的引用。您可能能够解析其中的一个列表
git status
或git log
不能给你想要的东西吗?
git log
s——author switch做你想做的吗?
不确定我是否理解,但git reflog
显示了局部变化的历史,这些变化改变了分支的尖端。
这可能就是你要找的。但是,历史记录具有有限的生命周期,git gc
会删除较旧的条目。
我相信这是有可能实现这与rebase
。你想要一个special_master
跟踪master
,但重置而不是合并拉。它唯一的提交是那些你在某个时候显式pull
设置的。
这看起来像是你在git中查看的元信息。这超出了git的范围。你可以包装git命令(很像git成就),并有一个二级存储库版本(HEAD文件和HEAD指示的第一个repo的ref文件)
Reflog默认只存储90天的信息。这是可以改变的。但是,如果您复制,您将丢失这些信息。