解決方法がわからないという問題に直面しています。
私はブランチからマスターに対してリベースを行いました:
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
これは、競合を修正するときに、リベースするブランチに適用されているパッチのすべてのコードを削除したために発生します。つかいます 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?
...しかし、これに依存しないでください(リポジトリフォルダーに残りのファイルを追加しないでください)
基本的には、動作するはずです
git diff
衝突を解決してから
git rebase --continue
動作するはずです。
コマンドラインでこれを実行してみてください:
$ git mergetool
競合を解決できるインタラクティブなエディターを起動する必要があります。手動で実行するよりも簡単です。また、gitはマージを実行するときに認識します。また、手動で実行しようとしたときに偶発的に完全にマージされない状況を回避します。
私はちょうどこの問題を抱えていた、と私はいくつかの原因があるかもしれないと思う間、ここに私のものです...
特定の条件下でコミットを拒否するgit pre-commitフックがありました。これは、フックの出力を表示するため、手動でコミットする場合は問題ありません。修正するか、commit --no-verifyを使用して無視することもできます。
問題は、リベースするときに、rebase --continueが(最後の変更をコミットするために)フックを呼び出すことです。しかし、リベースはフックの出力を表示せず、失敗したことを確認し、「すべてのマージ競合を編集してから、git addを使用して解決済みとしてマークする必要がある」という特定のエラーを吐き出します
修正するには、すべての変更をステージングし、「git rebase --continue」を実行する代わりに、「git commit」を試してください。同じフックの問題に苦しんでいる場合は、失敗の理由を確認する必要があります。
興味深いことに、git rebaseはgitフックからの出力を表示しませんが、フックをバイパスする--no-verifyを受け入れます。
AssetsLoader.Javaでマージの競合を見逃しました。開いて、競合マーカー( ">>>>"、 "===="、 "<<<<<")を探してから、もう一度git addを実行します。見つけにくい場合は、「git diff --staged」を実行してください。
競合を修正した後、変更されたファイルがステージングファイルに追加されていることを確認してください。これで問題は解決しました。
ステージングされていないファイルがあるときにこの警告が表示されました。ステージングされていないファイルがないことを確認してください。ステージングされていないファイルの変更を望まない場合は、git rm <filename>
。