そのため、何らかの理由で、新しくマージされたホットフィックスと多くの競合が発生しています。実際に[手動で]変更されたファイルは競合しません。競合はすべて、修正中に変更されなかったファイルにあり、明らかに空白の問題です。後でその問題を解明しようと思いますが、今度は修正プログラムをマージして展開する必要があります。
HEAD version?を使用するためにすべての競合を解決するにはどうすればよいですか?ファイルごとに移動したくありません。はい、それは悪い習慣ですが、競合はすべて空白であり、私は知っています= HEADは正しい—すべてのテストに合格し、本番環境で問題なく実行されています。
何か案は?
OSXを使用しています。
git merge -Xours Origin/master
Origin/master
とマージし(git pull Origin master
と同じこと)、ローカルブランチからバージョンを取得することにより、競合を解決します。
すでに悪いマージの途中にいる場合は、最初にgit reset --hard HEAD
を使用してすべてを先頭にリセットできます。
その場合は、
git reset --hard HEAD
git merge -Xours Origin/master
これで問題が解決するはずです!
(言及する価値もあります。-Xtheirs
は同じことを行いますが、競合がある場合は上流バージョンを使用します。)
また、競合が発生する可能性が最も高いのは、アップストリームバージョンがWindowsスタイルの行末を使用しており、ローカルマシンでファイルを編集したプログラムがMacスタイルまたはLinuxスタイルの行末を使用しているためです。
Gitで設定できるオプションでは、常にWindowsスタイルまたはLinuxスタイルの行末をコミットしますが、作業ディレクトリでは常にMacスタイルまたはLinuxスタイルをチェックアウトします。
詳細については、このリンクを参照してください: https://help.github.com/articles/dealing-with-line-endings
ローカルブランチで競合がある場合は、次のコマンドを実行するだけです。
git checkout --conflict=merge .
git checkout --ours .
ローカルブランチを使用して競合を解決します。
私は...するだろう:
$ git checkout master # or where ever you want to merge the hotfix into
$ git merge --no-commit -Xours <hotfix-branch>
$ git status # make sure the only change is the file you wanted
$ git diff # make sure they changes are what you wanted
$ git commit -m "<your merge message"
これはデフォルトの再帰的戦略を使用して競合しないファイルをプルしますが、マスター/ HEADバージョンを使用するだけで競合するファイルを解決します。ドキュメント:
$ git merge --help
....
recursive
... This is the default merge strategy when pulling or merging one branch.
The recursive strategy can take the following options:
ours
This option forces conflicting hunks to be auto-resolved cleanly
by favoring our version. Changes from the other tree that do not
conflict with our side are reflected to the merge result. ....