Git の git リポジトリで作業していて、素晴らしいアイデアを思いついたとします。
$ git rm -rf ドキュメンテーション
$ git commit -m 'ドキュメンテーションは弱者向けです'
それが次の歴史につながる。(注:git lol
は非標準ですが、非常に便利なエイリアスです。)
$ git 笑
* d55a922 (HEAD, master) ドキュメンテーションは弱者向け
* 443d803 (オリジン/マスター、オリジン/HEAD) マージ ブランチ「maint」
|\
| | * 8d44277 (origin/maint) ドラフト リリース ノートを 1.8.1.5 に更新
| | * 6f0c336 ブランチ 'ef/non-ascii-parse-options-error-diag' を maint にマージします
| | |\
...
マリガンを行うには、新しく作成したコミットでブランチをチェックアウトし、そこに戻ります。
$ git checkout -b mulligan/delete-all-documentation
$ git revert --no-edit HEAD
今と
$ git チェックアウト マスター
仕事に戻ることができます。
master に新しいコミットを追加すると、履歴は次のようになります
$ git ローラ
* b4d76d9 (HEAD, master) 新機能追加 X
| | * 84b0e21 (マリガン/delete-all-documentation) 「ドキュメントは弱者のためのもの」を元に戻す
|/
* d55a922 ドキュメンテーションは弱者向け
| | * 46b564f (origin/pu) ブランチ 'pc/subtree-add-before-fetch' を pu にマージします
...
これは一般的な方法ではありません。git merge
機能を元に戻すのは、 orgit cherry-pick
が問題なく進む場合、つまり、古い機能を削除したコードに他の変更が適用されていない場合にのみ、非常に簡単になります。先を見据えて、これがどれだけうまくスケーリングしないかを確認してください。古い機能を復活させるために、開発者はたくさんのブランチをふるいにかけ、復活させるのに適したものを見つける必要があります。Git は履歴検索の優れたサポートを備えています。これは、これらの長期にわたるマリガン ブランチが一般的な慣行ではないことからもわかります。