假设我有一个这样的图表:
A---B---C---D (master)
\
\-E---F (HEAD)
Run Code Online (Sandbox Code Playgroud)
如果我这样做git log --all --oneline,我将获得所有六个提交.
但如果图表是
A---B---C---D (master, HEAD)
\
\-E---F
Run Code Online (Sandbox Code Playgroud)
我不会看到E和F.我可以告诉我所有提交的git,包括那些未命名的分支上的提交吗?
谢谢
让我们说昨天我在我的主分支上做了一些更改,我忘了添加,提交它们.在早上我做到了
git reset --hard
Run Code Online (Sandbox Code Playgroud)
在这种情况下可以恢复已删除的文件吗?
我对GIT的情况感到有些困惑.
我正在开发一个GIT版本的项目,我只是注意到我们认为几周前已经在主分支上的一些提交实际上已经丢失了.我记得这些提交是由其他人在功能分支"功能/某事"上推动的,不再存在.
我试图找到那些丢失的提交来修复我们的错误并将它们推到永久分支上.在此团队中,每个开发人员都会在提交消息中提供他正在处理的故障单的ID.所以我肯定知道票证ID(例如1234)在我正在寻找的提交消息中,所以我尝试了:
git log --all --grep=1234
git log -g --grep=1234
git log --all | grep 1234
git reflog | grep 1234
Run Code Online (Sandbox Code Playgroud)
所有这些命令都没有返回.
此时,我正要放弃,然后我记得我们的git repo与Slack集成,所以我在松弛的历史中搜索了1234并发现了提交哈希值.我马上试过了:
git show hash1
git show hash2
Run Code Online (Sandbox Code Playgroud)
令人惊讶的工作!它显示了所有提交信息.所以提交就在那里,不知何故仍在我的本地存储库中.所以我想仔细检查一下我是如何错过它们的:
git reflog | grep hash1
git branch --contains hash1
git fsck --lost-found | grep hash1
Run Code Online (Sandbox Code Playgroud)
没有.
git fsck --unreachable | grep hash1
unreachable commit hash1
Run Code Online (Sandbox Code Playgroud)
在这里,它是在无法访问的提交列表中.
但这是一个很大的项目,并git fsck --unreachable返回了大量的提交,我怎么能通过关键字找到这个丢失的提交?如果我们没有第三方工具记录git活动,也许我会尝试将git fsck的输出以某种方式回滚到git show并且对结果进行grepping,但这似乎要做很多工作才能找到我的提交知道就在这儿.
PS:对不起,我不能分享回购,这是一个私人项目,但以下应该重现这种情况:
用户A:
git clone <repo>
git checkout -b feature/something
# add something to commit
git …Run Code Online (Sandbox Code Playgroud) git 中的标签显然可以通过简单地删除它们然后重新标记从一个提交移动到另一个提交。
例如:
git tag -m "Version 1.0" v1.0 abcd123
git push --tags
git tag -d v1.0
git tag -m "Corrected version 1.0" v1.0 1234abc
git push --tags
Run Code Online (Sandbox Code Playgroud)
如何查看特定标签的完整历史记录?(换句话说,任何时候创建/删除具有该名称的标签,以及每个标签指向的提交内容)
如何查看所有标签的完整历史记录?