[解決済み] Gitで最初の2つのコミットをつぶす?重複
質問
と
git rebase --interactive <commit>
を使えば、いくつものコミットをひとつにまとめることができます。
最初のコミットの中にコミットを詰め込むのでなければ、それは素晴らしいことです。それは不可能に思えますが。
それを実現する方法はあるのでしょうか?
ほどよく関連する
関連する質問ですが、最初のコミットに対するスクワッシュの必要性に対して、別のアプローチを思いつくことができました、それは、そう、2番目のコミットにすることです。
ご興味のある方は git: あるコミットを最初のコミットとして挿入し、他のコミットをすべてシフトさせるには?
解決方法は?
2012年7月更新( git 1.7.12+ )
root までのすべてのコミットをリベースし、2 番目のコミットを選択できるようになりました。
Y
を潰し、最初の
X
.
git rebase -i --root master
pick sha1 X
squash sha1 Y
pick sha1 Z
<ブロッククオート
git rebase [-i] --root $tip
<ブロッククオート
このコマンドを使うと、"から先の履歴を全て書き換えることができるようになりました。
$tip
"からルートコミットまで。
参照
GitHub のコミット df5df20c1308f936ea542c86df1e9c6974168472 を参照してください。
から
クリス・ウェブ(
arachsys
)
.
前述のとおり
コメントにて
, a
git push --force-with-lease
(よりも安全)。
--force
のように
ミッコ・マンタライネン
リマインド・ユー
の後に必要です。
rebase
操作で、その手直しをリモートリポジトリで公開する必要がある場合です。
当初の回答(2009年2月)
SOの質問"にそのための様々なレシピが載っていると思います。 git リポジトリの最初の二つのコミットを結合する方法は? "です。
チャールズ・ベイリー
最も多く提供された
詳細な回答
コミットは完全なツリーであることを思い出させてくれます (以前の状態からの差分だけではありません)。
そして、ここでは古いコミット("initial commit")と新しいコミット(squashingの結果)は共通の祖先を持たないことになります。
つまり、quot;
commit --amend
最初のコミットを新しいものに変更し、前の最初のコミットの履歴を新しい最初のコミットにリベースします(多くの競合が発生します)。
(最後の文は
git rebase -i --root <aBranch>
)
むしろ、(この
A
は元の "初期コミット"、そして
B
は、後続のコミットを最初のコミットに押し込む必要があります)。
-
最初のコミットを形成したい最後のコミットに戻る(HEADをデタッチする)。
git checkout <sha1_for_B>
-
ブランチポインタを最初のコミットにリセットし、インデックスと作業ツリーはそのまま残します。
git reset --soft <sha1_for_A>
-
B'のツリーを用いて、初期ツリーを修正する。
git commit --amend
-
この新しい初期コミットに一時的にタグを付けます (または、新しいコミットの sha1 を手動で記憶することもできます)。
git tag tmp
-
元のブランチに戻る(この例ではmasterとする)。
git checkout master
-
B 以降のすべてのコミットを新しい初期コミットにリプレイします。
git rebase --onto tmp <sha1_for_B>
-
一時的なタグを削除します。
git tag -d tmp
そうすると、「"
rebase --onto
をリベースするため、マージ中にコンフリクトが発生することはありません。
の後に作られた
最後のコミット(
B
であった)を最初のものに押し込めた。
A
)から
tmp
(潰された新しい初期コミットを表す): 些細な早送りのマージのみ。
それは"に効きますね。
A-B
はもちろんのこと、"
A-...-...-...-B
"(この方法では、いくつものコミットを最初の1つにまとめることができます。)
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] Gitを使って最後のXコミットをまとめる
-
[解決済み] Git でブランチからコミットを削除する
-
[解決済み] git rebase の取り消し
-
[解決済み] 既にリベースを開始している場合、2つのコミットを1つにマージするにはどうすればよいですか?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Git Push Error: リポジトリデータベースにオブジェクトを追加する権限が不足しています。
-
[解決済み] Gitのフォルダ構造で変更・追加されたファイルのみをエクスポートする機能
-
[解決済み] git reset --softの実用的な使い方?
-
[解決済み] Gitです。リベース中に "Cannot 'squash' without a previous commit" エラー発生
-
[解決済み] Gitを使って最後のXコミットをまとめる
-
[解決済み] すべてのgitコミットを1つにまとめるには?
-
[解決済み] Gitのルートコミットを編集しますか?
-
[解決済み】Gitでルートコミットの前にコミットを挿入する?
-
[解決済み】Git リポジトリの最初の2つのコミットを結合する?
-
[解決済み] git の半秘密の空のツリーオブジェクトは信頼できますか?なぜシンボル名がないのですか?