假设我有多次提交(从新到旧):
我想将4cc9886
和162f27e
推送到我的远程存储库,而又不丢失在3xc1849
上取得的进展。
最终按下3xc1849
。
答案 0 :(得分:1)
没有什么特别的事情要做。只需使用git push
,如下所示。
每次提交:
已编号:这些是您在此处提到的字符串(尽管它们是缩写的,但实际上不可能是其中之一:3xc1849
不是有效数字);
包含上一个提交的提交编号(哈希ID),作为其元数据的一部分。
这意味着在一系列线性提交的情况下,如果我们使用大写字母代替实际的哈希ID,则可以这样绘制它们:
... <-F <-G <-H
Git使用分支名称查找序列中的 last 提交,该分支名称包含实际的哈希ID(无论数字H
代表此处)。提交H
本身拥有较早提交G
的哈希ID,因此,通过读取H
,Git可以找到G
。 G
依次保存较早提交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
提交。