如何安全地推送先前的提交而不丢失前面的提交

时间:2020-09-17 05:55:34

标签: git

假设我有多次提交(从新到旧):

  • 3xc1849-添加了高级搜索功能。 (这是HEAD BTW)
  • 4cc9886-添加了用于计算角色策略的功能,通过迁移到RolesAPI引入了一些小错误修复。
  • 162f27e-切换到权限管理器v2.0。
  1. 我想将4cc9886162f27e推送到我的远程存储库,而又不丢失在3xc1849上取得的进展。

  2. 最终按下3xc1849

2 个答案:

答案 0 :(得分:1)

TL; DR

没有什么特别的事情要做。只需使用git push,如下所示。

每次提交:

  • 已编号:这些是您在此处提到的字符串(尽管它们是缩写的,但实际上不可能是其中之一:3xc1849不是有效数字);

  • 包含上一个提交的提交编号(哈希ID),作为其元数据的一部分。

这意味着在一系列线性提交的情况下,如果我们使用大写字母代替实际的哈希ID,则可以这样绘制它们:

... <-F <-G <-H

Git使用分支名称查找序列中的 last 提交,该分支名称包含实际的哈希ID(无论数字H代表此处)。提交H本身拥有较早提交G的哈希ID,因此,通过读取H,Git可以找到GG依次保存较早提交F的哈希ID,依此类推。

当您使用git push时,您的Git会根据您要求Git发送的提交编号将他们需要但尚未收到的所有提交发送到另一个Git。也就是说,您首先对您的Git说:请发送到另一个Git,并提交G (您填写哈希ID)。 到达那里后,请他们设置分支名称B (您填写名称)。

您说的方式与:

git push name-of-other-git hash-ID-of-G:B

如果您使用:

git push name-of-other-git B

您告诉Git使用通过将您的名称B转换为哈希ID而找到的哈希ID,然后您的Git应该重复该名称他们的 Git。因此,简写版本发送 all 提交,然后同步名称。但是,长版本允许您选择要发送的提交数量。

一旦git push真正开始使用并以您的名字 name-of-other-git 存储的URL调用了Git,您的Git便将哈希ID交给他们的Git。他们要么说:哈哈,我已经有一个了,或者是我没有那个,请发送。如果他们说请发送,则您的Git现在已有义务提供该提交的父母。在这种情况下,因为我们要让Git向他们发送提交G,所以我们的Git现在必须提供提交F。他们在大型数据库中查看所有拥有的提交,以查看是否具有该哈希ID。如果是这样,他们说啊,我已经有一个了,如果不是,他们说也请发送该消息,我们必须继续提供F'的父母。

最终,我们会在一个已经存在的提交上见面,或者从G开始向后发送每个提交,不再发送任何内容。现在所有提交都已完成,我们让Git要求其Git设置分支 B ,然后他们要么说 OK, 我不能因为_____ (他们填写了此空白)。现在,您的Git向您报告成功或失败。

答案 1 :(得分:1)

那将是:

# replace <branch_name> with the name of the branch you wish to update
# on your remote :
git push origin 4cc9886:<branch_name>

3xc1849之上,您仍然可以进行本地4cc9886提交。

相关问题