web-dev-qa-db-ja.com

リベースが進行中です。コミットできません。続行または中止(中止)するにはどうすればいいですか?

実行すると:

git status

私はこれを見る:

rebase in progress; onto 9c168a5
You are currently rebasing branch 'master' on '9c168a5'.
(all conflicts fixed: run "git rebase --continue")
nothing to commit, working directory clean

私がする時:

ls `git rev-parse --git-dir` | grep rebase || echo no rebase

なるほど:rebase-apply

Originにコミットできません。

git branch

示しています:

* (no branch, rebasing master)
  develop
  master

私は立ち往生しています。どうすればいいのかわかりませんか。リベースするのに本当に長い時間がかかりますか? git rebase --continueは何もしません。私はgitステータスのものを持っていません。私に何ができる?

UDATE:これは、git rebase --continueの出力です。

Applying: no message
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

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

git add。何もありません。

95
Joseph Chambers

再ベースはバックグラウンドでは発生しません。 「リベースが進行中」とは、リベースを開始したが、競合によりリベースが中断されたことを意味します。リベースを再開する(git rebase --continue)か中止する必要があります(git rebase --abort)。

git rebase --continueからのエラーメッセージが示すように、空のパッチになるパッチを適用するようにgitに依頼しました。ほとんどの場合、これはパッチがすでに適用されていて、git rebase --skipを使用してそれを削除したいことを意味します。

192
Matthieu Moy

リポジトリにリベースするように指示しました。あなたがコミットし(SHA 9c168a5で識別される)、それからgit rebase masterまたはgit pull --rebase masterをしたようです。

あなたはブランチマスターをそのコミットにリベースしています。あなたはgit rebase --abortでリベースを終了することができます。これは、リベースを開始する前の状態に戻ります。

6
Schleis

私は最近この状態になりました。リベース中の衝突を解決した後、私はgit rebase --continueを実行するのではなく変更をコミットしました。 git statusおよびgit rebase --continueコマンドを実行したときに表示されたのと同じメッセージが表示されます。私はgit rebase --abortを実行してからリベースを再実行することで問題を解決しました。リベースをスキップすることも可能かもしれませんが、どのような状態になってしまうのかよくわかりませんでした。

$ git rebase --continue
Applying: <commit message>
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

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

$ git status
rebase in progress; onto 4df0775
You are currently rebasing branch '<local-branch-name>' on '4df0775'.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working directory clean
5
jsears

「rebase status」で行き詰まった

On branch master
Your branch is up to date with 'Origin/master'.

You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working tree clean

しかしgit rebase --skipを実行するとerror: could not read '.git/rebase-apply/head-name': No such file or directoryが生成されました。

rm -fr ".git/rebase-apply"の実行は助けになりました。

注:もちろん、リベースを気にしない場合、または以前のリベースを使用したくない場合にのみ実行してください。

2
Cat Boss
  • ステップ1:git rebase --continueを進めていく

  • ステップ2:CONFLICTSを修正してgit add .

  • ステップ1に戻ります。no changes ..と表示されている場合はgit rebase --skipを実行してからステップ1に戻ります。

  • リベースをやめたい場合はgit rebase --abortを実行してください。

  • すべての変更が終わったらgit commit -m "rebase complete"を実行すれば完了です。

2
Ani Menon

私はgitgit checkout自動ベースに設定します

# in my ~/.gitconfig file
[branch]
    autosetupmerge = always
    autosetuprebase = always

そうでなければ、ブランチを切り替えると自動的にマージされます。デフォルトとしてはこれが最悪の選択だと思います。

ただし、ブランチに切り替えてgit cherry-pick <commit-id>を実行すると、競合が発生するたびにこの奇妙な状態になります。

実際にはrebaseを中止する必要がありますが、最初に競合を修正し、ファイルをgit add /path/to/file(この場合は競合を解決するためのもう1つの非常に奇妙な方法ですか?)、次にgit commit -i /path/to/fileを実行します。これでrebaseを打ち切ることができます。

git checkout <other-branch>
git cherry-pick <commit-id>
...edit-conflict(s)...
git add path/to/file
git commit -i path/to/file
git rebase --abort
git commit .
git Push --force Origin <other-branch>

2番目のgit commit .は打ち切りから来たようです。 rebaseを早く打ち切らなければならないとわかった場合は、回答を修正します。

他のコミットをスキップし、両方のブランチがスムーズでない場合(両方とも他方からコミットがない)、Pushの--forceは必須です。

0
Alexis Wilke