Gitリモートからプルするときにリモートの変更を使用して競合を解決する


297

GitHubリポジトリからサーバーにコードをプルしようとしていますが、マージの競合によりプルが失敗し続けます。最後のプル以降にローカルサーバーで発生した可能性のある変更を保持したくありません。

それで、競合を気にするのではなく、GitHubにあるバージョンでGitを強制的に上書きできる方法はありますか?



4
@nvm:いいえ。これは、上書きされる追跡されていないファイルではなく、実際のマージの競合に関するものです。
Cascabel、2011年

回答:


491

ローカルで行ったコミットを本当に破棄したい場合、つまり履歴にそれらを再び残さない場合は、プルの方法を尋ねる必要はありません。プルはマージを意味し、マージする必要はありません。あなたがする必要があるのはこれだけです:

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

個人的には、まず現在のHEADにバックアップブランチを作成することをお勧めします。これにより、これが悪いアイデアだとわかった場合でも、それを忘れることがありません。

一方、それらのコミットを保持し、オリジンとマージしたように見せて、マージでバージョンのみをオリジンから維持するようにしたい場合は、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

1
gitコマンドの2番目のブロックでは、2番目のコマンドの後に「git fetch origin」が必要ですか?
David Tuite、2011年

@David:はい、ある時点でoriginからフェッチする必要があります。申し訳ありませんが、私はそれを暗黙のうちに考えていました。
Cascabel 2011年

2
私とgitに関しては、暗黙のうちに残せるものは何もありません;-)。真剣に、100万に感謝します。あなたの答えはまさに私が探していたものです。
David Tuite、2011年

1
起源が実際に進んでいる場合、これは機能しますか?のように、先にコミットがない場合にも使用できますが、実際にはブランチを早送りできますか?
Jared Forsyth

1
ありがとう!簡単そうに見えます。
sholsinger 14年

137

nvmが指す重複リンクからの回答を使用できます。

または、それらの変更を使用して競合を解決できます(ただし、リモートバージョンと競合しない場合、一部の変更は保持される可能性があります)。

git pull -s recursive -X theirs

3
うまくいっていないようです。git gitバージョン1.5.6.5を使用すると、「エラー:不明なスイッチ `X '」が表示されます。不安定なバージョンにアップグレードする必要がありますか?
David Tuite、2011年

また、Antoine、競合するコンテンツだけでなく、すべての元のバージョンを取得したい場合は、次のことができます-私の回答を参照してください。
Cascabel、2011年


2
これがまさに私が探していたものです!
micahblu

2
@CeesTimmerman真実ではない、少なくとも最新のgitでは。Xオプションはマージ戦略に渡されます。これは、recursive2つのヘッドをマージする場合のみです。そのため、コマンドは文句を言うでしょう"Could not find merge strategy 'theirs'. Available strategies are: octopus ours recursive resolve subtree."-これは残念です。X設定(たとえばgit config pull.twohead theirs)で設定できますが、sできません。
OJFord 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.