我有一个git树:
A--B---------E'--F--G (master)
\
C--D--E
E'
是C--D--E
的压缩版本,未通过合并提交。理想情况下,它将作为非快进合并提交,如下所示:
A--B---------E'--F--G (master)
\ /
C--D--E
有没有办法创建E
到E'
链接而不重新设置以后的提交(并更改其提交哈希值)? (主要是我希望图表看起来更准确。)
(我已经阅读Represent a Git merge in former commits (fake a merge),这是一个非常相似的问题,但它没有做我想做的事。)
答案 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/E
或git log --oneline --graph --decorate master
会显示您期望的图表。据我所知,唯一的缺点是现在gitk master
或git show E'
没有提供补丁,只提供合并提交的数据。根据手册,有一些已知的错误,因此使用此功能有点冒险。