あなたはgit rebase
コマンドを探しています。単純なケースの場合は、代わりに
git checkout D
git rebase F
を行い、これは単一のコミットにスカッシュません
git rebase D F
を行います。これを行うには、おそらく、少なくともエラーが発生しやすいオプションは、対話型のコミットを行うことになります。
git checkout D
git rebase -i F
これはリベースしようとしているD
でコミットとエディタが表示されます。
pick 293a24d Some commit message
pick a015bbe Some commit message
pick e19f4fa Some commit message
pick 40ae959 Some commit message
pick fba6b72 Some commit message
# Rebase 419206d..fba6b72 onto de95063
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
は指示に従ってくださいとsquash
の代わりpick
で開始するすべてが、最初の行を変更します。それは次のようになります。これにより、エディタを保存して終了するとメッセージをマージするオプションが提供されます。
またはpick
をreword
に変更し、残りの部分をfixup
に変更することができます。これにより、最初のコミットメッセージのみが表示されます。このオプションは、すべての古いコミットメッセージを完全に破棄したい場合は、より簡単です。
あなたは非常に冒険を感じている場合は最後に、あなたは自動的にリベースの最初のインタラクティブな部分をバイパスし、コミットリストをフィルタリングすることができます
EDITOR='sed -i -e "2,$s/pick/squash/"' git rebase -i F
これは自動的に始まるすべての行にsquash
にpick
を変更します2行目は、通常のインタラクティブエディタの代わりにsed
でエディタファイルをフィルタリングします。
'git log'を実行すると、出力には一緒に押しつぶされたコミットのリストが表示されます。それを行う方法はありますか?「マージ」というコメントを持つ新しいコミットIDだけが表示されますか? – Maddy
はい、 'git commit -m'を使用してください。ここで空の 'git commit'は' merge --squash'のデフォルトを使います。これはブランチコミットの連結リストです。 –
RJFalconer
非常にきちんとした、また、おそらくリベースが含まれていないので、おそらく最も安全な方法です。 –