是否有可能使现有的git提交显示为合并?

时间:2017-07-27 09:54:37

标签: git merge

我有一个git树:

A--B---------E'--F--G (master)
    \       
     C--D--E

E'C--D--E的压缩版本,未通过合并提交。理想情况下,它将作为非快进合并提交,如下所示:

A--B---------E'--F--G (master)
    \       /
     C--D--E

有没有办法创建EE'链接而不重新设置以后的提交(并更改其提交哈希值)? (主要是我希望图表看起来更准确。)

(我已经阅读Represent a Git merge in former commits (fake a merge),这是一个非常相似的问题,但它没有做我想做的事。)

2 个答案:

答案 0 :(得分:6)

不,在不影响F和G提交的情况下不可能这样做。如果你改变提交的父母,提交会改变,所以如果E'如果改变了,那么F也必须改变,因为它的父母是不同的。

答案 1 :(得分:2)

阅读Git Tools - Replace后,我觉得有可能。

 lv = (ListView) findViewById(R.id.lv);
 lv.setAdapter(new ArrayAdapter<String>(ShowUsers.this,android.R.layout.simple_list_item_1,arr)); //remove this

或者完成:

git checkout B
git merge E --no-ff
#let's say the created merge commit is O
git replace E' O

git replace --graft E' B E 创建一个引用为git replace。它可以通过.git/refs/replace/E'推送到另一个存储库,如果您希望替换在其他存储库中工作,则应该是这样。

如果您不再需要它,git push <remote> refs/replace/E'将删除替换。 git replace -d E'将在远程存储库中删除它。

现在git push <remote> :refs/replace/Egit log --oneline --graph --decorate master会显示您期望的图表。据我所知,唯一的缺点是现在gitk mastergit show E'没有提供补丁,只提供合并提交的数据。根据手册,有一些已知的错误,因此使用此功能有点冒险。