如何在Git中获取从不同分支合并的对象的名称

时间:2017-07-31 20:14:40

标签: git github git-diff

我试图在最后一次提交中合并对象的名称,然后尝试压缩所有这些文件。我已经有了归档命令,它将获取这些文件并压缩它们。下面的命令会压缩分支中的所有文件。

git archive -o update.zip HEAD

但是如果我能以某种方式获得命令来获取从不同分支合并的对象列表,我可以组合这两个命令并仅压缩那些对象,如下所示。

git archive -o update.zip HEAD $(COMMAND TO GET NAME from last merge)

1 个答案:

答案 0 :(得分:0)

我不清楚这意味着什么。我们来试试吧。

$ git checkout main
[checkout message]
$ git merge sidebranch
[merge messages]

假设在main的提示和sidebranch的提示之间的合并基础提交中,我们有文件ABC

main的提示下,我们有文件ABCD。由于合并基础A已更改,B未更改且C为新内容,因此D未更改。

sidebranch中,我们自合并基础修改了B已移除 C,并添加了E

因此合并的结果是:

  • 文件A因基数未改变而保持不变;
  • 对文件B的所有更改都在一起(可能已解决了一些冲突);
  • 文件C已完全删除;
  • 文件D仍然保留在main的上一个提示中;和
  • 文件E已添加到main中的新合并提交中,其格式与sidebranch中的提示相同。

您在zip存档中想要什么?只有文件B进行了实际合并。文件E是新的,但没有合并。文件C 已消失:您将如何在存档中表示此内容?

要获取main上一个分支提示与main 当前分支提示之间的更改内容的列表,您可以执行以下操作:

git diff --name-status <previous-hash> main

会显示B已修改,C已删除,E已添加。你可以使用main^main~1拼写上一个哈希值,但这是一个相当大胆的假设。

可能找到保存在传输此存档的其他计算机上的先前哈希的最佳方法是在另一台计算机上进行设置时保存哈希值。也就是说,如果整个过程是:

  • 从HEAD制作初始档案;
  • 将存档复制到计算机 M;
  • 之后,尝试以某种方式更新 M ,而不使用全新的存档

我们希望在初始归档时保存HEAD转换的哈希ID。有很多方法可以做到这一点,例如将git rev-parse HEAD的输出保存在文件中,或创建tag

结论

如果这一切都是正确的,那么您可能希望:

  1. 每次进行存档或存档更新时都会制作标记;
  2. 使用git diff --name-status或类似比较两个标签;
  3. 找出一些方法来将此更改表示为一组可以应用的更改:zip存档不会起作用,因为它不会处理删除。