我试图在最后一次提交中合并对象的名称,然后尝试压缩所有这些文件。我已经有了归档命令,它将获取这些文件并压缩它们。下面的命令会压缩分支中的所有文件。
git archive -o update.zip HEAD
但是如果我能以某种方式获得命令来获取从不同分支合并的对象列表,我可以组合这两个命令并仅压缩那些对象,如下所示。
git archive -o update.zip HEAD $(COMMAND TO GET NAME from last merge)
答案 0 :(得分:0)
我不清楚这意味着什么。我们来试试吧。
$ git checkout main
[checkout message]
$ git merge sidebranch
[merge messages]
假设在main
的提示和sidebranch
的提示之间的合并基础提交中,我们有文件A
,B
和C
在main
的提示下,我们有文件A
,B
,C
和D
。由于合并基础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
转换的哈希ID。有很多方法可以做到这一点,例如将git rev-parse HEAD
的输出保存在文件中,或创建tag。
如果这一切都是正确的,那么您可能希望:
git diff --name-status
或类似比较两个标签;