5

私たちの git リポジトリで、すべてのファイルを削除するコミットを誤って作成してしまいました。このコミットは中央サーバーにプッシュされ、他の開発者やビルド サーバーによって取り下げられているため、これを元に戻すために履歴を書き換えることは理想的ではありません。代わりに、すべてのファイルを以前の状態に復元するために別のロールバック コミットを作成し、その間に別のロールバック コミットを試行しましたが、何らかの形で一部のファイルのみが復元されました。

cc043989 Rollback commit (goes back to 4bf31def)
f5d7f10e Failed rollback commit
cd60376f Delete all files commit
4bf31def Last good commit
.
.
.

私たちの懸念は、これが長期的な影響をもたらすかどうかです。具体的には、機能ブランチとの間のマージおよびサブツリー リポジトリとの間のマージに関してです。将来、常にマージやその他の困難なことが発生する場合は、履歴を書き直し、ビルド サーバー/他の開発者リポジトリを手動で処理するだけの価値があるかもしれません。

4

3 に答える 3

1

履歴が次のようになっているとします。

A --- B --- C---Dマスター
 \
  E---Fトピック

コミット「B」では、誤ってすべてのファイルを削除してしまいます。コミット「C」では、すべてのファイルを復元します。

トピックブランチをマスターブランチにマージすると、そうでない場合よりもはるかに多くのマージの競合が発生します。ファイルが削除されなかったかのように履歴を書き直すことをお勧めします。これは、そのコミットを維持することに実質的なメリットがないためです(非常にパブリックなブランチでない限り)。

コミットを削除するには、

git checkout master
git rebase -i 4bf31def

次に、悪いコミットをコメントアウトします。

#cc043989ロールバックコミット(4bf31defに戻ります)
#f5d7f10e失敗したロールバックコミット
#cd60376fすべてのファイルを削除するcommit
4bf31def最後の良いコミット

良いニュースはあなたがあなたの時間をとることができるということです。作業を続けて後で履歴を修正することも、今すぐ修正することもできます。

于 2013-01-24T00:27:57.323 に答える
0

私が言う簡単な答えはそれについて心配しないでください。

git rebaseそれが問題になる場合は、問題のあるコミットを終了する必要があるかもしれません。履歴を書き換えますが、その時点ではやむを得ない場合があります。

于 2013-01-24T00:24:55.443 に答える
0

ロールバックを維持すると、すべてのファイルを削除してからすべてのファイルを追加した場合と同様の結果になります。すべてのファイルに2つのソースがあるため、ロールバックの前に行われた変更はすべて衝突します。

サブツリーも同じように影響を受けます。すべてを削除するコミットと、それを再作成する別のコミットがあります。したがって、以前から変更を加えて、競合として扱われます。

于 2013-01-24T01:47:15.660 に答える