2016-05-03 14 views
1

私は3つのコミット(A、B、C)行った:コミットにコミットCをマージする方法コミットを以前のコミットにマージするには?

$ git log -3 --pretty=oneline 
64ffaf1ec379150cb423844bfff7557704c92a4e C 
bf89fa3c27dfb9eb3d4c0d83f268902fa828d986 B 
a9cae79f45c2494909ff64246182d6a4fde51eda A 

を?

コミットBを保持したいと思います。これは、マージされたAおよびCコミットの変更を反映します。

git rebaseを使用してコミットを以前のコミットにマージすることができます。しかし、特定のコミットを以前のコミットにマージして変更履歴を書き換える方法はわかりません。

+0

あなたがコミットCをAにマージする場合は、cherrypickを使用します。しかし、ちょうどAと 'git merge C'に移動するのはなぜですか? – iberbeu

+0

@iberbeuそれはgitログからgitを削除しません。これを望む理由は、gitログをきれいに保つことです(文字通り唯一の理由です)。 – Gajus

答えて

2

私はgitで "merge"という技術的な使い方ではなく、 "結合"することを前提としています。その場合、git rebase --interactiveはあなたの友人です。

pick a9cae79 A 
pick bf89fa3 B 
pick 64ffaf1 C 

あなたは、次のようなものに変更したいと思うでしょう:それを実行すると、以下の内容で、あなたのエディタが起動します

pick a9cae79 A 
squash 64ffaf1 C 
pick bf89fa3 B 

は、次に保存してエディタを終了します。これによりコミットAとCの変更が​​組み合わされ、コミットメッセージを編集するように求められます。コミットメッセージはコミットAとCから事前に設定されています。コミットCからコミットメッセージを破棄する場合は、代わりにfixup上記のsquashのものである。

+0

すごいですね。私はインタラクティブなrebaseを実行するときにgitコミットの順番を変更することを認識していませんでした。 – Gajus

関連する問題