git rebase
ファイルがリポジトリに追加され、次にリポジトリから削除され、作業ディレクトリに追加される (ただし、リポジトリには追加されない) 特定のケースでは、正しく動作しないように見えます。
私の問題のより具体的な説明は次のとおりです。
ブランチが作成され、トランクから切り替えられた場合、
ファイル X が追加され、ブランチにコミットされます。
その後、X が削除され、ブランチでコミットされます。
X は再び作業ディレクトリに作成されますが、追加もコミットもされません。
そして幹の枝が進み、
それから
高度なトランクをベースとして使用して実行されたリベースは、X の上書きを拒否するため失敗します。
また、作業ディレクトリ X が削除または移動されても、リベースを続行することはできません。
コマンドラインで私の問題を再現するスクリプトは次のとおりです。
git init
echo foo > foo.txt
git add .
git commit -m 'foo'
echo foo >> foo.txt
git add .
git commit -m 'foo foo'
git checkout -b topic HEAD^
git log
echo bar > bar.txt
echo baz > baz.txt
git add .
git commit -m 'bar baz'
git rm bar.txt
git commit -m '-bar'
echo bar > bar.txt
git rebase master
# the following output is emitted:
# First, rewinding head to replay your work on top of it...
# Applying: bar baz
# Using index info to reconstruct a base tree...
# Falling back to patching base and 3-way merge...
# error: Untracked working tree file 'bar.txt' would be overwritten by merge. Aborting
# Failed to merge in the changes.
# Patch failed at 0001 bar baz
#
# When you have resolved this problem run "git rebase --continue".
rm bar.txt
git rebase --continue
# the following output is emitted:
# Applying: bar baz
# No changes - did you forget to use 'git add'?
#
# When you have resolved this problem run "git rebase --continue".
# If you would prefer to skip this patch, instead run "git rebase --skip".
# To restore the original branch and stop rebasing run "git rebase --abort".
git rebase --abort
、 remove bar.txt
、そしてgit rebase master
もう一度使用して、リベースを中止できることはわかっています。しかし、最初に中止せずにリベースを続行するにはどうすればよいでしょうか?