web-dev-qa-db-ja.com

Gitリベースの失敗

同僚の仕事をリベースしようとしています。

最初に、<<<<<の頭が新しいコードを含むようにシームする多くの競合が発生します。

その後、しばらくすると次のエラーが表示されます。

fatal: update_ref failed for ref 'refs/heads/dev_504': 
cannot lock ref     'refs/heads/dev_504': ref refs/heads/dev_504 is at
 XXXXXXX 
 but expected     XXXXXXXX
Could not move back to refs/heads/dev_504

その後、とにかく続行しようとすると、次のエラーが表示されます。

fatal: cannot resume: .git/rebase-apply/final-commit does not exist.

リベースでエラーが発生しないように修正するにはどうすればよいですか?

27
Bunker
  • git rebase --abortを実行して、リベースを完全に取り消すことができます。 Gitは、git rebaseが呼び出される前のブランチの状態に戻ります。

  • git rebase --skipを実行して、コミットを完全にスキップできます。つまり、問題のあるコミットによって導入された変更は含まれません。このオプションを選択することは非常にまれです。

  • 競合を修正できます。

  • それに失敗すると、ブランチを再作成するか、リベース状態を含む.git/rebase-mergeディレクトリを削除できます。

12
Slim KTARI

どうやらリベースしたいブランチは、分岐した時間の間にリベースされたようです。おそらく、履歴をクリーンアップするか、さらに別のブランチにリベースしました。もしそうなら、あなたはする必要があります:

  • 中止、現在の混乱:git rebase --abort
  • 現在の状態:git fetch
  • 今興味深い部分:

    git rebase --onto BUDDY_BRANCH YOUR_BRANCH~ YOUR_BRANCH

例えばローカルの分岐master(Origin/masterのチェックアウト)、新しい分岐test_branch(現在のOrigin/masterで更新したい)

git rebase --onto master test_branch~ test_branch

これは単純な用語で、ブランチの最初の親コミットを取得し、現在のマスターで対応するものを見つけ、それに基づいてリベースします。

6
Alim Özdemir