0

今日、私git bisectはバグを引き起こしたコミットを追跡することに成功しました。二分法に降りると、実際には2つのバグがあり、2つの別々のコミットで導入されていることに気づきました。今、私はバグの1つを修正してgit bisectから、2番目のバグを見つけるためにもう一度使用するのが好きです。これを行うには、最初のバグを修正して、履歴のすべての段階でバグが消えるようにする必要があると思いますよね?つまり、バグを引き起こしたコミットを修正してから、バグのあるコードに適用されたすべての変更を適応させる必要があります。この方法でのみ、2番目のバグをハントするために2番目の二分法を開始できます。

コミットが既存のコミットの修正であることをgitがまだ認識しているように、過去のコミットを修正することは可能ですか?もちろん、他の開発者は、完全な新しい履歴ではなく、バグ修正のみを取り込むことができるはずです。つまり、古いコミットを新しいハッシュを持つコミットに置き換えるソリューションは機能しません。

4

2 に答える 2

0

通常、すでに他の開発者と共有されている履歴を書き換えるのは悪い習慣です。おそらく、バグ修正で新しいコミットを作成し、履歴を書き換えるのではなくプッシュする必要があります。

そうは言っても、過去のコミットを修正することはできます。ここでコミット B を変更したいとしましょう:

* 909debb (HEAD, master) C
* 5a12c7f B
* cfe7820 A

そのための私のお気に入りの方法は、インタラクティブなリベースを使用することです。

% git rebase -i HEAD~2

これにより、次のエディタが開きます。

pick 5a12c7f B
pick 909debb C

変更するpickコミットeditの を次のように変更します。

edit 5a12c7f B
pick 909debb C

ファイルを書き込みます。

% git rebase -i HEAD~2
Stopped at 5a12c7f... B
You can amend the commit now, with

        git commit --amend

Once you are satisfied with your changes, run

        git rebase --continue

次に、変更を加えます。

% git add <files>
% git commit --amend -m 'Updated B'
% git rebase --continue

そして今、私の履歴は次のようになります。

* bf4a3a7 (HEAD, master) C
* b79ab6f Updated B
* cfe7820 A
于 2012-10-08T17:19:30.290 に答える
0

git-bisect を使用すると、ツリーが適切かどうかを判断する前に、基本的に何でもできることを覚えておいてください。

そのため、頭に浮かぶ解決策の 1 つは、git-apply を使用して、最初の修正 (おそらく git-diff で生成されたもの) を含むパッチを毎回手動で作業ツリーに適用することです。

分割するたびに git reset --hard などを使用してパッチをクリーンアップする必要がある場合があります。

于 2012-10-09T01:14:53.510 に答える