Git: ブランチ上のすべてのコミットをまとめる方法 質問する

Git: ブランチ上のすべてのコミットをまとめる方法 質問する

次のようにして新しいブランチを作成しますmaster:

git checkout -b testbranch

20 回のコミットを実行します。

ここで、20 個のコミットを圧縮したいと思います。次のようにします。

git rebase -i HEAD~20

コミット数がわからない場合はどうすればいいでしょうか? 次のような方法はありますか?

git rebase -i all on this branch

ベストアンサー1

すべてのコミットを圧縮する別の方法は、インデックスを次のようにリセットすることですmaster


注: Gitのデフォルトのブランチ名は、masterGitバージョン2.41(2023年第3四半期)でも変わりません。git initマニュアルページ
Git バージョン 2.28 (2020 年第 3 四半期)設定可能なデフォルトのブランチ名が導入されました。つまり、リモート リポジトリでは、 などの別のデフォルトのブランチ名をオプションで使用できますmain。最も普遍的に適用可能な例を提供し、混乱を避けるために、この回答では Git のデフォルト設定を前提とします。

以下のコマンドを任意のデフォルト ブランチで動作させる必要がある場合は、masterを に置き換えます${defaultBranch}
そして を定義しますdefaultBranch=$(git config --get init.defaultBranch || echo main)


解決策に戻ります: (すべてのコミットを圧縮するには) インデックスを次のようにリセットしますmaster:

git checkout yourBranch
git reset $(git merge-base master $(git branch --show-current))
git add -A
git commit -m "one commit on yourBranch"

yourBranchこれは、" " がどのブランチから来ているかを知っていることを意味するため、完璧ではありません。
注: origin ブランチを見つけることはGitを使えば簡単/可能(の視覚的な方法が最も簡単であることが多い、 としてここで見られる)。

git branch --show-current注:Git 2.22 (2019年第2四半期) で導入


あるいは、大雨 弘樹コメント:

git switch yourBranch
git reset --soft $(git merge-base master HEAD)
git commit -m "one commit on yourBranch"
  • git branch --show-currentHEAD はすでにそのブランチへの参照であるため、必要ありません。
  • は必要ありませんgit add -A。HEADgit reset --softのみが移動され、インデックスは変更されません (つまり、ファイルはすでに「追加」されています)。

編集: git push --force(またはgit push --force-with-lease)を使用する必要があります
。「git push --force-with-lease--force


カルロチャ・ホア追加するコメント:

リセットするには、

git reset $(git merge-base master $(git rev-parse --abbrev-ref HEAD)) 

[それは]現在いるブランチを自動的に使用します。
また、これを使用する場合、コマンドはブランチ名に依存しないため、エイリアスも使用できます

おすすめ記事