web-dev-qa-db-ja.com

Git remoteから引っ張るときにremote changesを使って衝突を解決する

私はGitHubリポジトリから自分のサーバーにコードを取り込もうとしていますが、マージの競合のために引き込みが失敗し続けます。前回のプル以降にローカルサーバーで発生した可能性のある変更を保持したくありません。

競合を気にするのではなく、GitにGitHubのどのバージョンでも上書きさせる方法はありますか。

255
David Tuite

ローカルで作成したコミットを本当に破棄したいのであれば、つまりそれらを二度と履歴に入れないでください。プルする方法を尋ねているのではありません。プルとはマージを意味します。マージ。あなたがする必要があるのはこれだけです:

# fetch from the default remote, Origin
git fetch
# reset your current branch (master) to Origin's master
git reset --hard Origin/master

個人的には、現在のHEADに最初にバックアップブランチを作成することをお勧めします。これが悪い考えであるとわかっても、それを見逃さないようにするためです。

一方、それらのコミットを維持して、Originとマージしたかのように見せ、マージでOriginからのバージョンのみを保持させたい場合は、oursマージストラテジーを使用できます。

# fetch from the default remote, Origin
git fetch
# create a branch at your current master
git branch old-master
# reset to Origin's master
git reset --hard Origin/master
# merge your old master, keeping "our" (Origin/master's) content
git merge -s ours old-master
427
Cascabel

Nvmが指す重複リンクからの回答を使用することもできます。

あるいは、あなたはそれらの変更を使用して衝突を解決することができます(しかしあなたの変更のいくつかはそれらがリモートバージョンと衝突しないなら保持されるかもしれません):

git pull -s recursive -X theirs
113
Antoine Pelisse