2017-07-27 46 views
2

我有一个Git树:是否有可能使现有的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),这是一个非常类似的问题,但它不会做我想做的。)

+0

合并'E'和'E''并创建合并提交。将合并提交合并到'master'。 'master'的历史中并不完美,但没有任何rebase和'C - D - E'。 – ElpieKay

回答

6

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

2

看完Git Tools - Replace后,我觉得有可能。

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 mastergitk master显示您期望的图形。据我所知,唯一的缺点是现在git show E'git log -1 E' -p不提供补丁,而只提供合并提交的数据。根据手册,有一些已知的错误,所以使用此功能有点危险。

相关问题