[解決済み] プッシュ前に複数のコミットを1つにまとめる
質問
この質問は、この作業をどのように行うかだけでなく、そうすることがGitの良い習慣なのか悪い習慣なのかに関わるものです。
ローカルではほとんどの作業をmasterブランチで行いますが、"topical_xFeature"と呼ぶトピカルブランチを作成したとします。topical_xFeature" で作業をしている間に、master ブランチで別の作業をするために行ったり来たりしているうちに、"topic_xFeature" ブランチで複数回のコミットをしたことが判明しました。
最初 これはバッドプラクティスだと思われますか?1回のプッシュで1ブランチ1コミットにしておいたほうが賢明ではないでしょうか? プッシュする前にブランチ上で複数のコミットをすることが良いのはどんな場合でしょうか?
2つ目 topical_xFeature ブランチの複数のコミットを master ブランチに取り込んでプッシュするにはどうすればよいでしょうか? 気にせず複数のコミットがプッシュされるようにすればいいのか、それとも何らかの方法でコミットをひとつにまとめてからプッシュしたほうが迷惑がかからないのか? また、どのようにすればいいのでしょうか?
どのように解決するのですか?
最初の質問ですが、複数のコミットを一度にプッシュすることは何も問題ありません。多くの場合、作業をいくつかの小さな論理的なコミットに分割し、一連の作業が完了したと感じた時点で初めてそれらをプッシュすることができます。あるいは、接続が切れている間にローカルでいくつかのコミットを行い、再び接続したときにそれらをすべてプッシュすることもあるでしょう。一回のプッシュでひとつのコミットに制限する必要はありません。
私は一般的に、各コミットを、動作に必要なすべてを含む、単一の論理的で首尾一貫した変更にしておくのが良いアイデアだと思います(そうすれば、コードが壊れた状態のまま放置されることはありません)。もし二つのコミットがあり、最初のコミットだけを適用するとコードが壊れてしまう場合、二番目のコミットを最初のコミットに統合するのは良い考えかもしれません。しかし、二つのコミットがあり、それぞれが合理的な変更を加えている場合は、別々のコミットとしてプッシュしても問題ありません。
もし、複数のコミットをまとめて潰したい場合は
git rebase -i
. ブランチにいる場合
topical_xFeature
を実行します。
git rebase -i master
. この操作でエディタウィンドウが開かれ、多くのコミットが
pick
. 最初以外を
squash
そうすると、これらの変更をすべて保持したまま最初のコミットにまとめるように Git に指示します。そうしたら
master
を作成し、機能ブランチにマージしてください。
git checkout topical_xFeature
git rebase -i master
git checkout master
git merge topical_xFeature
また、もしすべてを
topical_xFeature
を
master
を使えば、次のようにすればいいのです。
git checkout master
git merge --squash topical_xFeature
git commit
どれを選ぶかはあなた次第です。一般的には、複数の小さなコミットがあっても気にしませんが、時には余計なマイナーコミットをするのが面倒なので、ひとつにまとめてしまうこともあるでしょう。
関連
-
[解決済み】複数のgitコミットを元に戻すには?
-
[解決済み] [Solved] 作業ツリーのディレクトリ 'example.com' を作成できませんでした。パーミッションが拒否されました
-
[解決済み] Gitで変更された複数のファイルのうち、1つのファイルだけを隠す?
-
[解決済み] Gitブランチをmasterにマージする最も良い(そして最も安全な)方法は何ですか?
-
[解決済み] 現在のGitブランチをmasterブランチにする
-
[解決済み] git のコミットを削除しても、変更は維持できますか?
-
[解決済み] Git で別のブランチからブランチを作成する
-
[解決済み] プッシュ後に git のコミットメッセージを変更する (誰もリモートからプルしていないと仮定した場合)
-
[解決済み] 間違ったGitブランチにコミットしてしまった場合の対処法
-
[解決済み】Featureブランチのリベースの後、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のエラー。リモートリポジトリへの接続時に「Host Key Verification Failed」。
-
git commits with an error: 更新が拒否されました。現在のブランチの先端が、このブランチより後ろにあるためです。
-
git revert 複数コミット
-
[解決済み】gitの「not something we can merge」エラーの解決方法
-
[解決済み】マージが終了していません(MERGE_HEADは存在します)。
-
[解決済み] git が「Pull is not possible because you have unmerged files」と表示するのはなぜですか?
-
[解決済み] Git - node_modules フォルダをどこでも無視するようにしました。
-
[解決済み] git stashを元に戻す
-
[解決済み] .gitignore と "以下の追跡されていない作業ツリーファイルはチェックアウトによって上書きされるでしょう"
-
[解決済み] Gitのフォルダ構造で変更・追加されたファイルのみをエクスポートする機能