Git & Version Control

Gitシミュレーター操作前に履歴の形を確かめる

例の履歴と操作を選び、実行せずに分岐の変化を確認します。

Gitシミュレーター

例のコミット図

AA: 共通の基点BB: mainの更新mainCC: 機能の変更DD: 機能のテストfeature

A~Dとプライム記号は教材のIDで、実際のGitハッシュではありません。

履歴のプレビュー

例と操作を選んでプレビューすると、ここに結果が出ます。

固定の教材図だけをブラウザー内で処理し、リポジトリには接続しません。

オプション

対象ブランチ: main · 元のブランチ: feature

Ctrl/Cmd + Enterで選択した操作をプレビューします。

操作を選んでプレビューしてください。

図は固定の一行ファイルだけを模擬し、実際のGitのマージ戦略を再現しません。

Gitシミュレーターでは、共通のAからmainとfeatureが分かれた小さな図を使います。コミット履歴を文字だけで追うと見落としやすい、親子関係とブランチの先端を先に確認できます。

早送りの例と同じ行を編集した例にも切り替えられます。表示するA~Dは教材の記号であり、手元のコミットIDでも実行可能なハッシュでもありません。

Gitシミュレーターを使う理由

元の履歴とコピー後を並べる

Gitシミュレーターはマージで残る元の線と、リベースで作られるC′・D′を分けて示します。Git可視化ツールで見る枝分かれに加え、cherry-pickが一つだけを移す点も確認できます。

共通コミットから二本の線が分かれ、マージの新しい節点が両方を親に持つ図。

競合の根拠を固定した例で示す

競合例ではapp.jsの同じ行に異なる値が入っています。どのコミットで停止するかを説明できますが、実際のファイル内容を知らないまま競合を予測することはできません。

同じ一行を二つのブランチが別々に変更し、新しい節点の前で警告が出る図。

図を読む三つの視点

01

まず早送りを試す

mainがfeatureの祖先なら、マージは既存の先端へポインターを動かすだけです。分岐した例とは違い、二つの親を持つコミットは増えません。

02

再作成された節点を追う

リベースはCとDを順に再適用し、featureをD′へ向けます。cherry-pickは選んだCまたはDだけをmainへコピーし、元のfeatureを残します。

03

古い結果を持ち出さない

場面や操作を変えると結果は直ちに期限切れとなり、コピーとダウンロードが無効になります。Ctrl/Cmd + Enterで再表示し、コマンド案の仮名を実際の参照先と照合します。

三つの操作で変わるもの

マージと早送りを区別

分岐した履歴では両方を親に持つコミットが増え、早送りではmainの先端だけが移ります。「マージなら必ず新しい節点」という誤解を図で避けられます。

コピーされる範囲を区別

リベースはfeatureの列を再作成し、cherry-pickは選択した一件だけを再適用します。プライム記号は新しいコミットを表すだけで、実際のSHAではありません。

競合は既知の一行に限定

同じ行の例はベース、現在側、取り込み側の値を表示します。実際のマージ戦略や改名検出は扱わず、競合ファイルを編集する機能もありません。

例の図が判定できないこと

実際のリポジトリは扱わない
Gitシミュレーターはgit logやフォルダーを読み込まず、コマンドも実行しません。作業ツリーの未保存変更、権限、リモートの状態は確認できません。
共有ブランチの安全性は判定しない
リベースで公開済みの履歴を書き換えると共同作業に影響します。例のmainとfeatureは実際の参照ではないので、チームの運用と対象ブランチを自分で確認してください。
競合は固定の一行だけ
app.jsの例では二側が一行を別の値にしたため停止します。実際のテキストマージ、コンフリクト解消、--continueはここでは行いません。
自由なGitコマンドは受け付けない
任意のコマンド、push/pull、stash、squash、revertは対象外です。コミット履歴の教材を実際のGit端末の代わりとして使わないでください。

Gitシミュレーターのよくある質問

コミット履歴を変更したmasterブランチに対してリベースしたい場合は?

この例ではfeatureをmainの新しい先端へ重ね、CとDをC′とD′として再作成します。実際のmaster/mainの名前や共有状況は読み取れないため、実行前に対象と未コミット作業を確認してください。

Cherry-pick後にMergeすると同じCommitの履歴が複数できるのはなぜですか?

cherry-pickは元のコミットを移動せず、変更を新しい親の上に記録します。その後に元の枝をマージすると、元とコピーの両方が履歴に見える場合があります。図は単一の摘み取りまでを扱います。

別ブランチの特定のコミットだけを反映するには?

一件だけならcherry-pickのプレビューを選び、CまたはDを指定します。草稿のハッシュ欄は仮の文字列なので、実際のコミットIDに置き換え、適用先の作業ツリーを確認してください。

プルリクエストのレビュー後、コミットをどう反映しますか?

ホスティング側にはmerge、rebase、squashなどの統合方式があります。このページは最初の二つの履歴形状と単一cherry-pickだけを説明し、PRの設定やレビュー状態は確認しません。

revert後、プルリクエストの差分は必ず消えますか?

revertは打ち消し用の新しいコミットを作る操作で、差分表示はその後の変更と比較基準にも左右されます。この教材にはrevertのシミュレーションがないため、実際のPR差分はホスティング側で確認してください。

端末の仕様と異なる結果ですか?

Gitシミュレーターで比較する

同じ図でマージ、リベース、摘み取りを比べ、固定の競合例も見てから、実際のブランチ名と状態を確認してください。