実行すると:
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。何もありません。
再ベースはバックグラウンドでは発生しません。 「リベースが進行中」とは、リベースを開始したが、競合によりリベースが中断されたことを意味します。リベースを再開する(git rebase --continue
)か中止する必要があります(git rebase --abort
)。
git rebase --continue
からのエラーメッセージが示すように、空のパッチになるパッチを適用するようにgitに依頼しました。ほとんどの場合、これはパッチがすでに適用されていて、git rebase --skip
を使用してそれを削除したいことを意味します。
リポジトリにリベースするように指示しました。あなたがコミットし(SHA 9c168a5で識別される)、それからgit rebase master
またはgit pull --rebase master
をしたようです。
あなたはブランチマスターをそのコミットにリベースしています。あなたはgit rebase --abort
でリベースを終了することができます。これは、リベースを開始する前の状態に戻ります。
私は最近この状態になりました。リベース中の衝突を解決した後、私は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
「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"
の実行は助けになりました。
注:もちろん、リベースを気にしない場合、または以前のリベースを使用したくない場合にのみ実行してください。
ステップ1:git rebase --continue
を進めていく
ステップ2:CONFLICTSを修正してgit add .
ステップ1に戻ります。no changes ..
と表示されている場合はgit rebase --skip
を実行してからステップ1に戻ります。
リベースをやめたい場合はgit rebase --abort
を実行してください。
すべての変更が終わったらgit commit -m "rebase complete"
を実行すれば完了です。
私はgit
をgit 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
は必須です。