我想在获取的遥控器上挑选一个提交,同时保留它的原始 SHA 提交代码(我当前的分支基于我重置为以前状态的这个遥控器)。
5 回答
git SHA 哈希是根据不同的信息计算得出的:
- 它所指的树;基本上,提交出现的分支中存储库的当前内容。
- 父提交的 SHA 。
- 提交消息。
- 作者信息:姓名、电子邮件和时间戳。
- 提交者信息:姓名、电子邮件和时间戳。
即使您编辑了一个精心挑选的提交,使得树、提交消息、作者和提交者信息完全相同,父提交(或提交,如果处理合并提交)的 SHA 总是不同的。因此,您将无法在挑选樱桃后生成相同的 SHA 哈希(除非您发现 SHA 冲突;))。
SHA 提交哈希由存储库的状态组成,使用直到提交点的整个历史记录(不包括分支)。这意味着除非整个历史记录相同,否则您不能将原始哈希保留在樱桃采摘上,在这种情况下,樱桃采摘将毫无意义。
根据您对其他答案的评论,我认为您只是想重置为一些远程提交。您可以使用它git reset --hard <SHA>
来执行此操作。警告:这将丢弃您在工作目录中的所有(未提交)更改,并且您在此分支中所做的所有提交将不再可访问。
如果这不是你想要的(或者你不确定),请更清楚地描述你做了什么,你想做什么或者你想要完成什么。
进入交互式 rebase(“git rebase -i”)并在末尾粘贴一个新条目,其中包含您想要添加到 HEAD 的确切修订。
例子:
打开一个交互式变基会话:
$ git rebase -i HEAD~4
屏幕现在显示[类似于]:
pick efdd0ece Linked how to make a pull requests in README
pick 790a3be8 adjust pytest pins to fix testing infra
pick 5bb90d8f drop 3.4 support
pick 839dc8ba v2.22.0
pick b97fb61a Print the type of the password instead of the password itself
您当前的 HEAD 是最后一个条目。在底部添加一个新条目(只需“选择”和您的修订;无需描述),其中包含您要添加的确切修订:
pick efdd0ece Linked how to make a pull requests in README
pick 790a3be8 adjust pytest pins to fix testing infra
pick 5bb90d8f drop 3.4 support
pick 839dc8ba v2.22.0
pick b97fb61a Print the type of the password instead of the password itself
pick 2a173c2a6491aae0772640ba7946a08315d18eb8
保存并关闭。确切的修订现在将成为您的 HEAD:
$ git log --oneline | head -n 6
2a173c2a Some commit
b97fb61a Print the type of the password instead of the password itself
839dc8ba v2.22.0
5bb90d8f drop 3.4 support
790a3be8 adjust pytest pins to fix testing infra
efdd0ece Linked how to make a pull requests in README
如其他答案所述,您仍然必须遵守规则。这仅适用于您拥有完全相同的分支、父级和提交者的非常狭窄的情况(例如,在以代码审查为中心的流程中,您有一堆提交在某个地方排队,开发人员可以将它们向上推送并无需先将它们提交到存储库中即可将它们关闭);真的只有当时间戳是唯一可能改变的东西时。在这种情况下,您可以强制相同的修订,以强制时间戳保持不变。
在大多数其他情况下,父母通常会有所不同,仅此一项,就意味着你强迫某个修改的梦想将破灭。如果任何非时间戳因素不同,Git 将始终将修订修正为正确。
我在以前的答案中找不到它,所以请注意,如果您在提交的父级之上进行挑选,实际上可以通过添加--ff
标志来保留原始 SHA。