私のローカルツリーはマスターから分岐しました。
$ 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で元に戻し、現在は1番です。
私が欲しいのは:
git rebase --continueがこれを行うことを理解しています。私はそれをして、それはうまくいきました(いくつかの手動マージとgit addの後)。しかし、私はそれを手動で実行できるようにしたいので、上記のhgコマンドに対応するgitコマンドは何だろうと思っています。
ありがとう。
PS。 ChangeLogファイルをgitとともに使用するのは愚かだと言わないでください。たとえそうであっても、それは私次第ではありません。
もちろん、これを手動で行う方法はいくつかあります。 gitは基本的にこれを内部で実行しているため、同じ競合が発生します。ただし、これを手動で行いたい場合は、いくつかの方法があります。
最初に、コミットを一連のパッチとしてエクスポートします。これを行う最も簡単な方法は、git format-patch
を使用することです。
git format-patch -M @{upstream}
コミットごとに1つ、計7つのパッチファイルが作成されます。 (「@ {upstream}」はリテラルであることに注意してください。これはgitのあまりよく知られていない機能です。)これは、git diff
の出力をキャプチャするよりも優れています。など)が保持されます。
次に、アップストリームに一致するようにリポジトリをリセットできます。
git reset --hard @{upstream}
その後、git am
を使用してパッチを再適用できます。一度に1つずつ、またはすべてを一度に適用できます。
git am 0001-blah-blah.patch
git am 0002-blah-blah.patch
...
2番目のオプションは、作業中の予備ブランチを作成することです。
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
。 (または、git fetch
。)2つのブランチ(master
とOrigin/master
-2つのブランチと同様に、競合を解決します(存在する場合)。
これは、gitの競合を解決する方法を知る必要がある場合に役立ちます。
Gitは、希望どおりに(Origin/masterからの最新の変更の上にパッチを再適用)しようとしたが、競合して失敗したと言います。直後の git pull --rebase
競合が競合ファイルでエディターを開きます(git status
は、これらを「変更済み」の下にリストし、標準のdiff linguaでマークされた競合を解決します。競合の解決が完了したら、git rebase --continue
(またはgit rebase --skip
解像度に変更がない場合)。
Gitのリベース後のマージ競合の解決に関するStackexchangeのドキュメント で彼について読んでください。
同じ問題に対するいくつかの適切な回答を次に示します(競合を解決しない場合のみ)。
マスターブランチと「オリジン/マスター」が分岐しました、「ブランチを「分岐解除」する方法」
最初に、ローカルバージョンと比較して、リモートマスターで何が変更されたかを確認できます。
git log HEAD..Origin/master
実際の問題を修正するために、ウィルヘルムテルが提案したのと同じ行に要約します。
git pull --rebase
あなたが言ったように、あなたは対立を得るでしょう。
競合の解決は繰り返し発生する問題です。まだ行っていない場合は、git mergetool
をご覧ください(詳細はgit help mergetool
をご覧ください)。グラフィカルサポートを取得するには、merge.tool
構成を上書きすることをお勧めします。たとえば、3者間マージに meld
を使用する場合、次を使用できます。
git config --global merge.tool meld
競合を解決した後、git pull --rebase
は何をしましたか? Origin/masterからのすべての変更をローカルマスターにマージし、その上で変更をリプレイしました。おめでとうございます、正常に戻りました。