問題タブ [git-interactive-rebase]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - 「git rebase」を使用してメッセージを書き換えるときにコミットの内容を表示するにはどうすればよいですか?
一連のコミットのいくつかのコミット メッセージを修正しています。私が開始
いくつかのコミットをリワード用にマークしてから、メッセージを編集します。やったときと同じように、各コミットの差分をエディタで見れると本当に助かりますgit commit -v
。このようなことは可能rebase
ですか?
(コミットだけedit
してから差分を見ることもできますが、これははるかに遅く、不便です。)
git - git rebase -i ショートカット -- リベースに最適なコミットを見つける
概要
現在のブランチで、他のブランチにも含まれている最新のコミットを見つける最速の方法は何ですか?
おまけ:この手法では、上記の質問の「その他のブランチ」を「その他のリモート ブランチ」または「その他のローカル ブランチ」にすることができますか?
バックグラウンド
を使うのが大好きgit rebase -i
です。私の主な使用例は、リモートにプッシュする前にコミットを再編成することです。したがって、私はしばしばそうしますgit rebase -i origin/master
。そこで、その操作のエイリアスを設定しましたgit rewrite
。
問題は、常に に対してリベースしたくないということですorigin/master
。たとえば、ブランチで作業していて、代わりgit rewrite
にgit rebase -i origin/branch
. または、私は地元の支社で働いていて、やりたいと思っているかもしれgit rewrite
ませんgit rebase -i localbranch
。
git rewrite
つまり、実際には、スクリプトに「他のブランチに含まれる最後のコミットからインタラクティブなリベースを実行する」ようなことをさせようとしています。私が思いついたのはこれです:(これはリモートブランチを見つけるためにのみ機能します)
この方法の問題点は、遅いことです。また、コミットに複数の親がある場合、親の 1 つだけに従うため、少し不正確です。
これを行うためのより良い/より速い/よりクリーンな方法を知っている人はいますか?
git - 非線形コミットを 1 つのコミットにまとめる (ソーセージ作り)
次の git 履歴を検討してください。
21f05f9
738ae0a
と2535dca
を 1 つのコミットに結合するにはどうすればよいですか?
git rebase -i 2535dca
、pick
ing 2535dca
、squash
ing 21f05f9
、を試し738ae0a
ましたが、次のエラーが表示されました。
0534049
コミットをスキップする方法があり288ffd2
、リベースのインタラクティブ モード内にあるかどうかはわかりません。
私がしていることを行うためのより良い方法はありますか? 落とし穴はありますか?
編集:
私が理解し始めているのは、特にそれらのコミットがすべて1つのファイルに関連している場合、非線形コミットが必要な場所に自分自身を置くべきではないということです。コミットによってコードが壊れたり、競合が発生したりする例が見られました。
git - タグに影響を与えずにマスターの履歴を変更するためにgitを使用する最良の方法は何ですか?
私は本のサンプルアプリケーションを書いています。
重要なコミットはすべてタグ付けされているため (Ch01_Ex04、Ch03_Ex01 など)、読者は関心のあるアプリケーションの状態をすぐに確認できます。
ときどき、例で行ったことについて気が変わって、時間をさかのぼってクラス名などを変更したいと思います。すべてのタグをリセットする必要なく、特定のコミットからその変更を適用したい。
私が持っているとしましょう:
ここで、B と C の間で変更を加えたいので、B から分岐して変更を行います。
私が行きたいのは:
これを行う方法が頭に浮かびません。方法はありますか?
git - マージ コミットが git rebase --interactive に表示されない
git log
次のことを明らかにします。
そのマージコミットは私には役に立たない - それはブランチの意味のある状態を表しておらず、リモートプルから生成されたので、私はリモート履歴の本当のコミットを持っている - 私がプルしたという事実をコミットする必要はない. このマージ コミットを押しつぶしたいと思います。スカッシュを行うための私の通常のテクニックは次のとおりです。
git rebase --interactive HEAD~2
(または、どこまでも遡る必要があります)
そして、それを隣接するコミットに押しつぶします。たとえば、コミットを行ったときに、小さな重要な詳細 (単一のファイル、またはファイルの 1 行を変更していない) を見逃したことに気付き、別のコミットを行う場合に、これを何度か行います。そうすれば、変更をリモートにプッシュして戻すと、すべてがきれいに整理され、まとまりのある物語が語られます。
しかし、この場合、git rebase ...
コマンドを実行すると commit2abcd
が表示されません。すぐにスキップするようで2abcd
、代わりに1abcd
andが表示されます3abcd
。マージ コミットが に表示されないようにする特別な点はありgit rebase --interactive
ますか? そのマージコミットを押しつぶすために他にどのような手法を使用できますか?
@Cupcakeのリクエストごとに更新:
の出力はgit log --graph --oneline --decorate
次のようになります。
役に立った?
git - リモートブランチを追跡せずにコミットをスカッシュするにはどうすればよいですか?
私は真新しいgitリポジトリを持っています。3 つのコミットがあります。
プロジェクトの履歴がきれいに見えるように、それらをまとめて押しつぶしたいと思います。
明らかに、レポは真新しいため、他の誰もレポを見たことがないため、履歴を変更しても問題ありません。私は唯一のユーザーです。
ただしgit rebase -i
、上流のブランチを追跡する必要があります。git ログを整理するまで、何も公開したくありません。
アップストリームを追跡せずに、インタラクティブなリベースまたは一般的なコミットのスカッシュを行うにはどうすればよいですか?