私のローカルツリーはマスターから分岐しています。
$ git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 7 and 3 different commit(s) each, respectively.
#
nothing to commit (working directory clean)
git pull --rebase** を試したのですが、失敗しました。
$ git pull --rebase
First, rewinding head to replay your work on top of it...
Applying: * ...
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging ChangeLog
CONFLICT (content): Merge conflict in ChangeLog
Failed to merge in the changes.
Patch failed at 0001 * ...
そこで、git rebase --abortで元に戻したところ、振り出しに戻りました。
私が欲しいのは
確かに git rebase --continue がこれを行うことは理解しています。 私はそれを実行し、(数回の手動マージと git add の後に)うまくいきました。 しかし、私はそれを手動で行えるようにしたいのです。 ということで、上記のhgコマンドに対応するgitコマンドは何だろうと考えています。
ありがとうございます。
PS.gitでChangeLog**ファイルを使うのは愚かだと言わないでください。 たとえそうであっても、それは私が決めることではありません。
もちろん、手動でこれを行う方法はいくつかあります。なぜなら、基本的にgitがあなたの代わりにこれをやってくれるからです。しかし、もしこれを手動で行いたいのであれば、以下のような方法があります。
まず、あなたのコミットを一連のパッチとしてエクスポートします。これを行う最も簡単な方法は、git format-patch
を使うことです。
git format-patch -M @{upstream}
は7つのパッチファイルを生成します -- あなたの各コミットに対して1つずつ。("@{upstream}" がリテラルであることに注意してください -- これは git のあまり知られていない機能です)。これは、git diff
の出力をキャプチャするよりも優れています。なぜなら、すべてのコミット情報(作者、日付、メッセージなど)が保存されるからです。
そうすれば、自分のリポジトリを上流と一致するようにリセットすることができます。
git reset --hard @{upstream}
それから、git am
を使ってパッチを再適用します -- ひとつずつでも、全部でもかまいません。
git am 0001-blah-blah.patch
git am 0002-blah-blah.patch
...
もう一つの方法は、あなたの作業内容を載せた予備のブランチを作成することです。
git branch scrap
そして、自分のブランチを上流にリセットします。
git reset --hard @{upstream}
その後、コミットをチェリーピックで上書きします。
git cherry-pick scrap~6
git cherry-pick scrap~5
git cherry-pick scrap~4
...
そして、スクラップブランチをゴミ箱に捨てます。
git branch -D scrap
git merge origin/master` は試されましたか?
リモートの変更は origin/master
ブランチに保存されます。(masterと
origin/master` の2つのブランチを、他のブランチと同じようにマージして、衝突を解決してください (衝突があれば)。
gitのコンフリクトを解決する方法を知る必要がある場合に役立つかもしれません。
https://stackoverflow.com/questions/161813/how-do-i-fix-merge-conflicts-in-git
Git は、あなたが望んでいること (origin/master からの最新の変更の上にあなたのパッチを再適用する) を正確に実行しようとしたが、衝突して失敗した、と言っています。git pull --rebaseがコンフリクトした直後に、コンフリクトしたファイルのあるエディタを開き (
git statusは "both changed" の下に表示します)、標準の diff 言語でマークしてコンフリクトを解消します。コンフリクトの解決が終わったら、
git rebase --continue(あるいは解決しても変更がない場合は
git rebase --skip`) を実行します。
Stackexchange documentation for 'Resolving merge conflicts after a Git rebase']1 で彼の記事を読んでください。