GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Unintegrated-Changes.html ・ emacs-doc.conao3.com

30.1.12.5 未統合の変更をすべて確認するコマンド

C-x v T =

このブランチと上流側の対応ブランチ(vc-diff-unintegrated)のマージベース以降のVCファイルセットにおける変更差分を表示します。

C-x v T D

このブランチと上流側の対応ブランチ(vc-root-diff-unintegrated)のマージベース以降のすべての変更の差分を表示します。

C-x v T l

このブランチとその上流ブランチのマージベース(vc-log-unintegrated)以降のVCファイルセットの変更に関するログメッセージを表示します。

C-x v T L

このブランチとその上流ブランチのマージベース以降のすべての変更に関するログメッセージを表示します (vc-root-log-unintegrated)。

C-x v T R =

このトピックブランチのマージベースと、その上流ブランチ (vc-diff-remote-unintegrated) 以降のVCファイルセットに対するリモート変更の差分を表示します。

C-x v T R D

このトピックブランチとそのアップストリーム対応ブランチ(vc-root-diff-remote-unintegrated)のマージベース以降のすべてのリモート変更の差分を表示します。

C-x v T R l

このトピックブランチとその上流ブランチのマージベース (vc-log-remote-unintegrated) 以降に、VCファイルセットに対して行われたリモート変更のログメッセージを表示します。

C-x v T R L

このトピックブランチとそのアップストリーム対応ブランチ(vc-root-log-remote-unintegrated)のマージベース以降のすべてのリモート変更に関するログメッセージを表示します。

分散型バージョン管理システム(分散型リポジトリと集中型リポジトリを参照)において、これらのコマンドは、アップストリームリポジトリの状態も考慮したC-x v M LおよびC-x v M Dの専用バージョン(マージベースを参照)を提供します。これらのコマンドは、単一のブランチで作業する場合と、別のブランチで機能を開発する場合の両方で有用です(バージョン管理のブランチを参照)。これら2つのケースは概念的に異なるため、それぞれ個別に解説します。

まずは、単一のブランチで作業することを検討してください。未統合の変更とは、まだアップストリームにプッシュしていない変更のことです。これには、プッシュされていないコミットと、ワーキングツリー内の未コミットの変更の両方が含まれます。多くの場合、これらの変更がまだプッシュされていない理由は、完成していないためです。つまり、これまでにコミットした変更が、単体では意味をなしていないということです。

C-x v T D (vc-root-diff-unintegrated) を指定すると、コミット済みおよび未コミットのこれらすべての変更の概要が表示されます。この概要は、これらすべての変更をコミットおよびプッシュ(ブランチへの変更のプル/プッシュを参照)した場合に、アップストリームリポジトリにどのような影響が出るかを差分形式で示したものです。代わりに C-x v T = (vc-diff-unintegrated) を使用すると、表示する変更を現在のVCファイルセットに限定できます。(C-x v T D と C-x v T = の違いは、C-x v D と C-x v = の違いと同様です(古いリビジョンの確認と比較を参照)。)21

タイプ C-x v T L (vc-root-log-unintegrated) を指定すると、同一の変更内容の概要がリビジョンログ形式で表示されます。これには未コミットの変更は含まれません。代わりに C-x v T l (vc-log-unintegrated) を使用すると、変更内容の表示を現在の VC ファイルセットに限定できます。

次に、別のブランチで機能を開発することを検討してください。これをトピックブランチ22と呼び、トピックブランチが元々作成されたブランチをトランクまたは開発トランクと呼びます。

この場合、「未統合の変更」とは、単にトピックブランチ上の未プッシュかつ未コミットの変更よりも、より具体的な概念を指します。変更がトランクにマージされ、プッシュされるまで、コラボレーターとの共有は完了したとは言えません。したがって、この例における「未統合の変更」とは、アップストリームリポジトリの開発トランクにまだ取り込まれていない変更のことです。つまり、トピックブランチ上のコミット済み変更のうちまだトランクにマージされていないものと、未コミットの変更を合わせたものを指します。

現在のブランチがトピックブランチであり、C-x v T D と入力すると、Emacs は現在のブランチがマージされる先のトランクに対して、未反映のすべての変更の概要を表示します。この概要は、すべての変更をコミットしてプッシュし、さらにその後トピックブランチをマージした場合に、トランクにどのような影響が出るかを diff 形式で示したものです。前述と同様に、代わりに C-x v T = を使用することで、表示する変更を現在の VC ファイルセットに限定できます。C-x v T L および C-x v T l は、前述と同様に未コミットの変更を除いた、対応するリビジョンログを表示します。

トピックブランチに関しては、リモートリポジトリ側のトピックブランチのバージョンにおける同様の情報を確認することも有用な場合があります。これは、プッシュ済みでありながらまだマージされていない、トピックブランチ上の未完了の作業のことです。これは共同作業者には見えますが、それ以外の点ではまだ統合されていません。このような作業をリモート未統合変更と呼びます。これまでに説明した4つのコマンドそれぞれに対応する、現在のトピックブランチのリモートリポジトリ側のバージョンに対して動作するコマンドがあります:C-x v R T = (vc-diff-remote-unintegrated)、C-x v R T D (vc-root-diff-remote-unintegrated)、C-x v R T l (vc-log-remote-unintegrated)、およびC-x v R T L (vc-root-log-remote-unintegrated)です。

これらの機能はすべて、現在のブランチがトランクかトピックブランチかをEmacsが正しく判定し、後者の場合はそのトピックブランチが最終的にマージされる先のブランチを正しく特定できることを前提としています。もし自動検出で正しい結果が得られない場合は、設定を調整したり上書きしたりするための選択肢がいくつか用意されています。

変数 vc-trunk-branch-regexps と vc-topic-branch-regexps には、それぞれ常に trunk および topic ブランチとして扱うべきブランチ名に一致する正規表現のリストが格納されています。また、C-x v T … にプレフィックス引数を指定することも可能です。これらの制御機能の使用方法の概要は以下の通りです。

  1. Emacsがトピックブランチをトランクであると認識していることが問題である場合は、その名称、あるいはその名称に一致する正規表現(正規表現の構文を参照)をvc-topic-branch-regexps変数に追加できます。一般的なユースケースを簡略化するための、いくつかの特殊な値があります:
    • 要素に正規表現で特殊な文字が含まれていない場合、その正規表現は両端で暗黙的にアンカーされます。つまり、まさにその名前の分岐にのみマッチします。
    • vc-topic-branch-regexps の最初の要素がシンボル not である場合、vc-topic-branch-regexps の意味は反転し、Emacs は名前が vc-topic-branch-regexps のいずれの要素とも一致しないすべてのブランチをトピックブランチとして扱います。
    • 正規表現のリストの代わりに vc-topic-branch-regexps 変数が特殊値 t を持つ場合、Emacs は vc-trunk-branch-regexps 変数がトランクとして明確に特定していないあらゆるブランチをトピックブランチとして扱います。

    単一のVCリポジトリにおけるvc-topic-branch-regexpsおよびvc-trunk-branch-regexpsの値の指定方法については、ディレクトリごとのローカル変数を参照してください。

  2. Emacsがトランクをトピックブランチであると認識していることが問題である場合、vc-trunk-branch-regexps 変数にその名称、あるいはその名称に一致する正規表現を追加できます。これは vc-topic-branch-regexps と同様に動作し、先ほど説明したのと同じ特殊値が適用されます。例えば、vc-trunk-branch-regexps の値が t である場合、Emacsは vc-topic-branch-regexps 変数がトピックブランチとして識別しないあらゆるブランチをトランクとして扱います。
  3. ダブルプレフィックス引数(すなわち C-u C-u C-x v T …)を指定すると、Emacsはいかなる場合でも現在のブランチをトランクとして扱います。これは、単にすべてのチェックアウト済み変更(VC Change Log を参照)と未コミットの変更の差分を取得したい場合に便利です。
  4. 最後に、単一のプレフィックス引数(すなわち C-u C-x v T …)を指定することで、完全に手動で制御することが可能です。Emacsは、変更が未解決ではなくなった際に送られる上流の場所であるoutgoing baseの入力を求めます。

    現在のブランチをトランクとして扱うには、あなたや共同作業者が完成した作業内容をプッシュする、現在のブランチのアップストリームバージョンへの参照を指定してください。現在のブランチをトピックブランチとして扱うには、そのトピックブランチが後でマージされるトランクのアップストリームバージョンへの参照を指定してください。

    ブランチのアップストリームバージョンへの参照を具体的にどのように指定するかは、使用しているバージョン管理システムによって異なります。例えばGitの場合、ブランチ foo のアップストリームバージョンを参照するには、origin/foo を指定します。したがって、foo が現在のブランチである場合、foo をトランクとして扱うにはアウトゴーイングベースとして origin/foo を、foo を後で bar という名前のトランクにマージされるトピックブランチとして扱うにはアウトゴーイングベースとして origin/bar を指定します。

    デフォルトのオプションがある場合は、現在のブランチをトピックブランチとして扱うために入力が必要だとEmacsが判断した内容になります。デフォルトがない場合は、プロンプトに何も入力しないことで、現在のブランチをトランクとして扱うことになります。


脚注

(21)

もう一つの比較点は、これらのコマンドが C-x v O = (vc-fileset-diff-outgoing) や C-x v O D (vc-root-diff-outgoing) と同様であるものの、報告される差分に未コミットの変更が含まれている点です。他のコマンドと同様に、プレフィックス引数を使用して特定のアップストリームの場所を指定できます。

(22)

トピックブランチとは、作業に使用され、後に長期間維持されるブランチにマージされる、より短期間のブランチのことを指します。トピックブランチは、時に「フィーチャーブランチ」とも呼ばれます。また、「フィーチャーブランチ」という用語が、別のブランチや他のブランチが繰り返しマージされる特定の種類のトピックブランチを指すものとして使われることも一般的です。