2016-11-20 12 views
1

git rebase -iは、squashまたはfixupによって前のものとコミットをマージすることができます。どちらのオプションも少なくとも1つのコミットがpick -edであることが必要です。最初のコミットを使用したいが、そのコミットメッセージを破棄したい場合はどうですか?言い換えれば、最初のコミットを後続のコミットとマージさせたいのであれば、どうしたらよいですか?gitインタラクティブ・リベースでコミットを次のコミットとマージするには?

答えて

1

あなただけの(すなわち、CentOSに*咳のLinuxディストリビューション*特定の無名の更新はありません咳を除く全員に、Gitは1.7.12以降で利用可能)--rootフラグを必要としています。

Bを退治した結果がちょうどA + B(の-コミットソートはかなりは、この単純な代数に従わないんが、それは我々の場合のために働く)であること。考えてみましょうしたがって、B + A = A + Bのため、コミット#1をコミット#2にスカッシュするか、コミット#2にコミット#2をコミットするかは関係ありません。もちろん、これは縮んだ一緒にコミットのメッセージを数えませんので、それを詳しく見てみましょう。

git rebase -i --rootを実行して、ルートコミットを含むすべてをリベースできるとします。あなたは今持っている:squash

pick cb57fdd initial commit 
pick 478acbd second commit 

変更秒1とファイルを書き込み、エディタを終了します。 Gitは2つのコミットを押しつぶして、もう一度あなたのエディタを起動します、そして、あなたは以下を参照してください。

# This is a combination of 2 commits. 
# This is the 1st commit message: 

initial commit 

# This is the commit message #2: 

second commit 

# Please enter the commit message for your changes. Lines starting 
# with '#' will be ignored, and an empty message aborts the commit. 
# 
# Date:  Sat Nov 19 14:44:07 2016 -0800 
# 
# interactive rebase in progress; onto 45bc10c 
# Last commands done (2 commands done): 
# pick cb57fdd initial commit 
# squash 478acbd second commit 

(正確な詳細がコミット内容としてはもちろんだけでなく、あなたのGitのバージョンによって異なります)。

好きなエディタにいるので、新しいコミットメッセージを作成するのは簡単です。たとえば、最初のコミットのメッセージ全体を削除することができます。それを行い、ファイルを書き、エディタを終了すると、すべて設定されます。

0
  • 最初のコミットハッシュを参照し、それを他の人を救う
    $ git branch
  • (たとえば、branch-1)支店名を参照してください(たとえば、最初のコミット)
    $ git log
  • は初段するチェックアウト
    $ git checkout first-commit
  • 変更にコミットメッセージ
    $ git commit --amend -am 'new-commit-msg' --allow-empty
  • をコミット
  • は今、すべての先物の基礎コミット git checkout branch-1
  • new-commit
    $ git replace first-commit new-commit
  • 書き換えによってfirst-commitを交換し、新しいコミットハッシュ(たとえば、新しい-commmit)戻るあなたの 'ブランチ-1' の枝に
    $ git log
  • を保存します交換時
    $ git filter-branch -- --all
  • 変更を強制的に適用します
    git push -f origin HEAD
+0

これは、最初のコミットで*メッセージ*を編集する方法の1つですが、OPが要求した別のコミットと一緒にそのコミットをスクラッシュしません。 ( 'git filter-branch'を使うつもりなら、' git filter-branch'コマンドでジョブ全体を実行することができますので '-msg-filter'を使うと不要です。if [$ GIT_COMMIT = <ルートコミットID>];次にcat/tmp/newmsg;そうでなければcat; fi''など)。 – torek

関連する問題