ブランチと手術

任意のコミットを編集

タイポは 3 週間前のコミットの中にあります。いつもの直し方は対話的リベースです。 そのコミットで止め、編集し、続行し、祈る。Gitcito の直し方はこうです。コミットを 右クリック、このコミットを編集、テキストを変更、完了。コミット詳細パネルの ペンボタンからも同じエディターが開きます。

過去のコミットを編集しているところ

何をするのか

HEAD の祖先である任意のコミットを選びます — 履歴が直線でなくても構いません。 モーダルにそのファイルとメッセージが表示され、どちらも編集できます。そこから起 きることは 2 つです。

  1. カスケードのプレビュー は、編集したコミットより上のすべてのコミットを メモリ上で リプレイします(merge-tree チェリーピックの連鎖 — チェックアウ トなし、作業ツリーなし、ref なし)。子孫のコミットはそれぞれ緑か赤で表示される ので、編集がきれいに波及するのか後の変更と衝突するのかが、何かが動く前に わかります。
  2. 履歴を書き換え は本番です。同じ連鎖をプラミングで構築し、ブランチを reset --keep で移動します — コミットしていない変更は引き継がれるか、リセット が中止されて何も起きなかったことになります。先に ガードスナップショットが取られ、取り消しで元の連鎖が復元されま す。

リプレイされたすべてのコミットの作者情報と日付は保持されます。変わるのはハッシュ だけです — それが履歴を書き換えるということです。

範囲内のマージ

2 つのマージの下にあるコミットを編集 — カスケードがマージをリプレイ

コミットと HEAD の間にマージがあっても、もう編集は無効になりません。カスケード はマージをリプレイするとき、その 記録された結果 — そのマージが実際にコミット したツリーで、衝突の解決も含まれます — を書き換え後の親に適用し直します。そのた め、誰かが手作業で行った解決は書き換え後も一字一句そのまま生き残ります。rerere なし、再マージなし、作業ツリーなし。カスケードの他の部分と同じメモリ上のプラミン グで、両方の親ポインタも保持されます。編集したコミットを同じく含むサイドブランチ は書き換えられて付け替えられ、含まないブランチはその同一性にいっさい手を付けられ ません。モーダルのバナーには範囲に含まれるマージの数が表示され、プレビューではマ ージのステップにマージアイコンが付きます。

正直な注意点: リプレイされたマージの出来は、記録された結果の出来を超えません。編 集が、マージ自身が解決した行と衝突する場合、プレビューは他の衝突するステップと まったく同じように赤になります — 何も推測はされません。

カスケードが衝突するとき

後のコミットが、いま編集しているのと同じ行に触れていた場合です。プレビューはその コミットを衝突ファイルとともに赤で示し、書き換えは実行を拒否します — 中途半端に 適用されることは決してありません。編集の内容を変えるか、 対話的リベースで衝突に正面から向き合ってください。

制限

  • コミットは HEAD の祖先でなければなりません。 マージされていないサイドブ ランチ上のコミットには、現在のブランチへリプレイするための経路がありません。
  • バイナリファイルと 2 MB を超えるファイルは表示されますが編集できません。
  • すでにリモートにあるコミットも編集できますが、次のプッシュは 強制プッシュ にならざるを得ません — その決断をする前にモーダルが警告します。
  • コミット内で削除されたファイルは編集できません(編集する内容がありません)。

関連項目: 対話的リベース · 復旧と reflog · アブソーブ

この翻訳を GitHub で改善