2017-07-27 4 views
2

私はのgitツリーがあります。既存のgit commitをマージとして表示させることはできますか?

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

E'は、マージを経由して、コミットされなかったC--D--Eのつぶれたバージョンです。後にコミットリベース(およびそれらのハッシュをコミット変更)することなく、EE'へのリンクを作成するにはどのような方法があります

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

:理想的にはそれが見えるように無早送りマージとしてコミットされているのでしょうか? (主に私だけのグラフは、より正確な見てみたい。)

(私はRepresent a Git merge in former commits (fake a merge)を読んで、非常によく似た質問ですが、それは私がやりたいしない。)

+0

「E」と「E」をマージし、マージコミットを作成します。マージコミットを 'master'にマージします。完全ではないがリベースはなく、 'master'の歴史に' 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 masterまたはgitk masterには、期待するグラフが表示されます。私が知る限り、唯一の欠点は今はgit show E'またはgit log -1 E' -pにはパッチがなく、マージコミットのデータだけが与えられることです。マニュアルによると、いくつかの既知のバグがあるので、この機能を使うのは少し危険です。

関連する問題