web-dev-qa-db-ja.com

削除/変更の競合の後、Gitのリベースは続行されません

マスターのステージブランチへのリベースの最中です

git checkout stage
git rebase master

ある時点で、2つのファイルを削除してから、GITに従って2つのファイルを変更しました。

warning: too many files, skipping inexact rename detection
CONFLICT (delete/modify): test-recommendation-result.php deleted in HEAD and modified in [Bug] Fix test recommender. Version [Bug] Fix test recommender of test-recommendation-result.php left in tree.
CONFLICT (delete/modify): test-recommendation.php deleted in HEAD and modified in [Bug] Fix test recommender. Version [Bug] Fix test recommender of test-recommendation.php left in tree.
Failed to merge in the changes.
Patch failed at 0015.

「ええ、git、これらのファイルを削除してください」と言いたいので....

git rm test-recommendation-result.php
git rm test-recommendation.php
git rebase --continue

Gitのコメント:

Applying [Bug] Fix test recommender
No changes - did you forget to use 'git add', Stupid?

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".

私は「私を「バカ」とは呼ばず、ただあなたに言ったことをやるだけだ!」と言います。

現在、私たちは行き詰まっています。誰が正しいのか、どうすれば修正できますか?

52
Clutch

行う git add -A に続く git rebase --continue。これにより、ファイルの削除を含むすべての変更が追加され、続行されます。

コミットに競合しない他のファイルが含まれていなかったため、マージする必要があるという保証はありません。 git rebase --skipはそれらのファイルを失います。あなたはそれを望んでいません。

お役に立てれば。

49
Adam Dymitruk

他のすべてが失敗したら、メッセージを読んでください。

このパッチは2つのファイルを変更しようとしていますが、すでに削除されています。それらを再び削除しても何もしませんでした。

ただ走れ git rebase --skip

2
Josh Lee

コミットによって既存のファイルと競合するバイナリファイルが追加されたときにこれをヒットしました。

私はそれで手に入れました:

  • 既存のファイルを削除する、
  • 別のファイルのコメントに1文字の変更を加える
  • 無関係な変更を「git add」します。

Gitは再び幸せになりました。 :)

1
Guy Lancaster

この状況を解決するために常に実行するコマンドのマジックシーケンスはありません。存在する場合、GITの開発者はユーザーを煩わせずにそのアクションを実行するだけです。

このエラーは、リファクタリングまたは名前変更されたファイルに影響する変更を選択/移植/バックポートしている場合にも発生する可能性があることを考慮してください。

たとえば、次のようなsupport/1.0というブランチがあるとします。

 
 com.somewhere.package-a /
 MyClass.Java 
 MyOtherClass.Java 
 

ここで、バージョン1.0と1.5の間で、これがリファクタリングされたと仮定します。したがって、release/1.5は次のようになります。

 
 com.somewhere.package /
 a /
 MyClass.Java 
 ANewClass.Java 
 b /
 MyOtherClass.Java 
 

ここで、support/1.0に基づいて機能ブランチにバックポートしようとしているリリース1.5から機能ブランチがあるとしましょう。そのコミットでは、リリース1.5から3つのファイルすべてに変更がありました(MyClass.JavaANewClass.Java、およびMyOtherClass.Java)。

リポートまたは単純なチェリーピックを使用してバックポートを支援しようとすると、次の2つのいずれかが発生する可能性があります。

  • 移植される変更の一部として、または移植される変更の直接の親コミットの中でファイルの名前が変更された場合、GITの組み込みの名前変更検出は、これらのファイルが元の名前のファイルの子孫であると検出し、変更を単に適用する場合があります元のファイルに。

  • リリース1.5の履歴(リリース1.0の出荷後)でファイルの名前が十分に変更された場合、GITはrelease/1.0でファイルが削除されたことを通知します。 1.5から。

バックポートされる変更のいずれかに追加されない限り、ANewClass.Javaはほぼ確実に削除されたというエラーをトリガーします。

したがって、この状況を解決するために1つのコマンドセットを盲目的にたどるとコードが失われる可能性があるため、GITから手動ガイダンスを求められます。

0
GuyPaddock