2

過去数か月の間に、機能のコードを開発し、その機能を git リポジトリにコミットし、後日、それらの機能の一部を削除することにしたことが何度もありました。コードベースをきれいに保つために私がしなければならないことは、gitにコミットされたファイルまたはファイルの一部を削除し、それらの変更をコミットすることです。

ただし、削除されたコードを後日簡単に復元できるようにするために、リポジトリを別の場所に複製し、削除前にコミットをチェックアウトし、変更されたファイルをコピーする追加の手順を実行します (ditto または手動で時々)、変更を新しいブランチにコミットします。この追加の手順により、削除された機能をブランチで抽象化し、後の段階でブランチをマージすることで機能をコードベースに簡単に復元することができます。

これは一般的な慣行ですか、さらに重要なことに、これをすぐに実行できる git 機能がありません。もしそうなら、これを達成するためのコマンドは何ですか?

4

2 に答える 2

3

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 は履歴検索の優れたサポートを備えています。これは、これらの長期にわたるマリガン ブランチが一般的な慣行ではないことからもわかります。

于 2013-03-01T17:48:41.213 に答える
3

git checkout <sha1> filepath/filenameリビジョン sha1 からファイルを作業コピーに取り込みます。

git revertマージコミットを含むコミットによって行われた変更を元に戻すことです。元に戻すこともできます。

プロセスが重すぎるため、クローンは使用しないでください。チェックアウトははるかに高速に動作します。

于 2013-03-01T16:21:09.567 に答える