次のようにして新しいブランチを作成しますmaster
:
git checkout -b testbranch
20 回のコミットを実行します。
ここで、20 個のコミットを圧縮したいと思います。次のようにします。
git rebase -i HEAD~20
コミット数がわからない場合はどうすればいいでしょうか? 次のような方法はありますか?
git rebase -i all on this branch
ベストアンサー1
すべてのコミットを圧縮する別の方法は、インデックスを次のようにリセットすることですmaster
。
注: Gitのデフォルトのブランチ名は、master
Gitバージョン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-current
HEAD はすでにそのブランチへの参照であるため、必要ありません。- は必要ありません
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))
[それは]現在いるブランチを自動的に使用します。
また、これを使用する場合、コマンドはブランチ名に依存しないため、エイリアスも使用できます。