33

そのため、何らかの理由で、新しくマージされたホットフィックスと多くの競合が発生しています。実際に [手動で] 変更されたファイルには競合がありません。すべての競合は、修正中に手つかずのファイルにあり、明らかに空白の問題です。後でその問題を解決しようとしますが、今は修正プログラムをマージして展開する必要があります。

HEAD バージョンを使用するためにすべての競合を解決するにはどうすればよいですか? ファイルごとに移動したくありません。はい、私はそれが悪い習慣であることを知っていますが、競合はすべて空白であり、HEAD が正しいことを知っています — すべてのテストに合格し、本番環境で正常に実行されます。

何か案は?

私はOSXを使用しています。

4

3 に答える 3

70
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 スタイルの行末を使用しているためです。

常に Windows スタイルまたは Linux スタイルの行末をコミットするように git に設定できるオプションがありますが、作業ディレクトリでは常に Mac スタイルまたは Linux スタイルをチェックアウトします。

詳細については、このリンクを参照してください: https://help.github.com/articles/dealing-with-line-endings

于 2013-11-26T22:28:10.523 に答える
11

ローカル ブランチで競合が発生した場合は、次のコマンドを実行するだけです。

git checkout --conflict=merge .
git checkout --ours .

ローカル ブランチを使用して競合を解決するには。

于 2018-09-13T12:36:41.493 に答える
6

私は...するだろう:

$ 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. ....
于 2013-11-26T22:37:18.400 に答える