我想精选一次从远程拉取的提交记录,并保留其原始SHA提交代码(我的当前分支基于此远程分支,我将其重置为先前状态)。
我想精选一次从远程拉取的提交记录,并保留其原始SHA提交代码(我的当前分支基于此远程分支,我将其重置为先前状态)。
git SHA哈希值是从不同的信息中计算出来的:
即使您编辑了一个cherry-pick提交,以便树对象、提交消息、作者和提交者信息完全相同,但父提交对象(如果处理合并提交,则父提交对象将有多个)的SHA值始终会不同。因此,在cherry-pick后,您将无法生成相同的SHA哈希值(除非您找到SHA碰撞;))。
git branch master remote/master
创建了我的分支,并保留了原始 SHA... 然后我重置到特定的提交,现在我想要重置到另一个更近的提交,但它跳转到了存储库日志上的另一个点... - blameless75SHA提交哈希是由存储库的状态组成的,使用了整个历史记录直到提交点(不包括分支)。这意味着,除非整个历史记录相同,否则在挑选时无法保留原始哈希值,在那种情况下,挑选也没有意义。
git reset --hard <SHA>
来完成此操作。警告:这将会删除工作目录中的所有未提交更改,并且此分支中的所有提交将不再可用。 如果这不是您想要的(或者您不确定),请更清楚地描述您所做的事情以及您想要做什么或正在尝试完成的任务。git reflog
来恢复至少提交的更改。 - siegi打开交互式重置("git rebase -i")并在末尾粘贴一个新条目,其中包含您想要添加到头部的确切版本。
示例:
打开交互式重置会话:
$ 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”和你想要插入的确切修订版本;无需描述):
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都会自动修复修订版本以确保其正确性。
在之前的回答中,我没有找到提到它的地方,所以请注意,如果你在提交父级上挑选(cherry-picking),添加--ff
标志实际上可以保留原始的SHA。
git merge --ff-only [分支名称]
而不是cherry-pick
。 - fuenfundachtzig