web-dev-qa-db-ja.com

Gitのリベース-すべてのマージの競合が解決された場合でも文句を言い続ける

解決方法がわからないという問題に直面しています。

私はブランチからマスターに対してリベースを行いました:

git rebase master

そして、次のエラーが発生しました

 First, rewinding head to replay your work on top of it...
 Applying: checkstyled.
 Using index info to reconstruct a base tree...
 Falling back to patching base and 3-way merge...
 Auto-merging AssetsLoader.Java
 CONFLICT (content): Merge conflict in AssetsLoader.Java
 Failed to merge in the changes.
 Patch failed at 0001 checkstyled.

そこで、お気に入りのエディターに行き、1行の競合を修正し、ファイルを保存してgitステータスを実行し、次の出力を得ました。

 # Not currently on any branch.
 # Changes to be committed:
 #   (use "git reset HEAD <file>..." to unstage)
 #
 #  modified:   PassengerContactHandler.Java
 #
 # Unmerged paths:
 #   (use "git reset HEAD <file>..." to unstage)
 #   (use "git add/rm <file>..." as appropriate to mark resolution)
 #
 #  both modified:      AssetsLoader.Java
 #

AssetsLoader.Javaとgitステータスを追加してgitを実行すると、次の結果が得られました。

 # Not currently on any branch.
 # Changes to be committed:
 #   (use "git reset HEAD <file>..." to unstage)
 #
 #  modified:   AssetsLoader.Java
 #  modified:   PassengerContactHandler.Java
 #

そして、git rebaseを実行したときに、次の結果が得られます。

git rebase --continue
You must edit all merge conflicts and then
mark them as resolved using git add

パッチをスキップしてリベースを続行できることは知っていますが、PassengerContactHandler.Javaの変更がブランチにリベースされるかどうかはわかりません。

どうすればいいのかわかりません。

編集:競合が解決されたファイルが元のバージョンとまったく同じである可能性がありますか?

ありがとう、ルーカス

編集、それはちょうど私に再び起こった:

それはちょうど私に再び起こった、

(307ac0d...)|REBASE)$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   assets/world/level1/Level-1.xml
#   modified:   George.Java
#   modified:   DefaultPassenger.Java
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   mb-art/originalAssets/27dec/

((307ac0d ...)| REBASE)$ git rebase --continue

You must edit all merge conflicts and then
mark them as resolved using git add

git --version

git version 1.7.1
85
Lucas

これは、競合を修正するときに、リベースするブランチに適用されているパッチのすべてのコードを削除したために発生します。つかいます git rebase --skip 続ける。

もう少し詳しく:

通常、リベース中に競合を修正する場合、競合するファイルを編集し、リベースするブランチに現在適用されているパッチのコードの一部またはすべてを保持します。パッチを修正して実行した後

git add your/conflicted/file
git status

変更されたファイルを示す(通常は緑の)行が表示されます

変更:your/conflicted/file

git rebase --continueは、この状況では正常に機能します。

ただし、競合を解決するときに、新しいパッチのすべてを削除し、リベースしたブランチのコードのみを保持する場合があります。これで、ファイルを追加すると、リベースしようとしたファイルとまったく同じになります。 git statusは、変更されたファイルを表示する緑色の線を表示しません。今、あなたがするなら

git rebase --continue

gitは文句を言うでしょう

変更なし-「git add」の使用を忘れましたか?

この状況でgitが実際に望むことは、

git rebase --skip

パッチをスキップします。以前はこれを行ったことはありませんでした。実際にスキップすると実際に何がスキップされるのかわからなかったため、「このパッチをスキップする」が本当に何を意味するのかはわかりませんでした。しかし、緑線が表示されない場合

変更:your/conflicted/file

競合するファイルを編集して追加し、gitステータスを実行した後、パッチ全体を削除したことを確認でき、代わりに

git rebase --skip

続ける。

元の投稿では、これは時々機能すると述べています。

git add -A
git rebase --continue
# works magically?

...しかし、これに依存しないでください(リポジトリフォルダーに残りのファイルを追加しないでください)

91
jonasfh

Git 1.7のバグのようです

これを解決する方法に関する良い記事があります

基本的には、動作するはずです

git diff

衝突を解決してから

git rebase --continue

動作するはずです。

20
acme

コマンドラインでこれを実行してみてください:

$ git mergetool

競合を解決できるインタラクティブなエディターを起動する必要があります。手動で実行するよりも簡単です。また、gitはマージを実行するときに認識します。また、手動で実行しようとしたときに偶発的に完全にマージされない状況を回避します。

4
Batkins

私はちょうどこの問題を抱えていた、と私はいくつかの原因があるかもしれないと思う間、ここに私のものです...

特定の条件下でコミットを拒否するgit pre-commitフックがありました。これは、フックの出力を表示するため、手動でコミットする場合は問題ありません。修正するか、commit --no-verifyを使用して無視することもできます。

問題は、リベースするときに、rebase --continueが(最後の変更をコミットするために)フックを呼び出すことです。しかし、リベースはフックの出力を表示せず、失敗したことを確認し、「すべてのマージ競合を編集してから、git addを使用して解決済みとしてマークする必要がある」という特定のエラーを吐き出します

修正するには、すべての変更をステージングし、「git rebase --continue」を実行する代わりに、「git commit」を試してください。同じフックの問題に苦しんでいる場合は、失敗の理由を確認する必要があります。

興味深いことに、git rebaseはgitフックからの出力を表示しませんが、フックをバイパスする--no-verifyを受け入れます。

4
carpii

AssetsLoader.Javaでマージの競合を見逃しました。開いて、競合マーカー( ">>>>"、 "===="、 "<<<<<")を探してから、もう一度git addを実行します。見つけにくい場合は、「git diff --staged」を実行してください。

3
Ether

競合を修正した後、変更されたファイルがステージングファイルに追加されていることを確認してください。これで問題は解決しました。

2
primulaveris

ステージングされていないファイルがあるときにこの警告が表示されました。ステージングされていないファイルがないことを確認してください。ステージングされていないファイルの変更を望まない場合は、git rm <filename>

1
ScottyBlades