527

私は Windows で Git (msysgit) を使用して、これまで行ってきた設計作業の変更を追跡しています。

今日、私は別の PC (リモート リポジトリを使用brian) で作業しており、今日行った編集をラップトップの通常のローカル バージョンにマージしようとしています。

私のラップトップではgit pull brian master、変更をローカル バージョンにプルしていました。メインの InDesign ドキュメント以外はすべて問題ありませんでした。これは競合として表示されます。

PC 上のバージョン ( brian) は保持したい最新のものですが、レポにこれを使用するように指示するコマンドがわかりません。

ファイルをラップトップに直接コピーしようとしましたが、これによりマージプロセス全体が壊れているようです。

誰かが私を正しい方向に向けることができますか?

4

12 に答える 12

972

git checkout--oursこのような場合にor--theirsオプションを受け入れます。したがって、マージの競合があり、マージするブランチのファイルだけが必要であることがわかっている場合は、次のことができます。

$ git checkout --theirs -- path/to/conflicted-file.txt

そのバージョンのファイルを使用します。同様に、(マージされているバージョンではなく) 自分のバージョンが必要であることがわかっている場合は、次を使用できます。

$ git checkout --ours -- path/to/conflicted-file.txt
于 2010-01-29T17:48:13.670 に答える
155

競合を手動で解決し (ファイルをコピーして)、次のようにファイルをコミットする必要があります (コピーしたか、ローカル バージョンを使用したかは関係ありません)。

git commit -a -m "Fix merge conflict in test.foo"

Git は通常、マージ後に自動コミットしますが、Git だけでは解決できない競合を検出すると、見つけたすべてのパッチを適用し、残りは手動で解決してコミットするように残します。Git Merge Man PageGit-SVN クラッシュ コース、またはこのブログ エントリは、それがどのように機能するかを明らかにするかもしれません。

編集:以下の投稿を参照してください。実際にファイルを自分でコピーする必要はありませんが、使用できます

git checkout --ours -- path/to/file.txt
git checkout --theirs -- path/to/file.txt

をクリックして、必要なファイルのバージョンを選択します。ファイルのコピー/編集は、両方のバージョンを混在させたい場合にのみ必要です。

mipadisの回答を正しいものとしてマークしてください。

于 2008-11-10T15:49:46.670 に答える
126

この問題を克服することもできます

git mergetool

これによりgit、競合するバイナリのローカル コピーが作成され、それらにデフォルトのエディターが生成されます。

  • {conflicted}.HEAD
  • {conflicted}
  • {conflicted}.REMOTE

明らかに、テキスト エディターでバイナリ ファイルを有効に編集することはできません。代わりに、エディターを閉じずに新しい{conflicted}.REMOTEファイルをコピーします。{conflicted}その後、エディターgitを閉じると、装飾されていない作業コピーが変更され、マージの競合が通常の方法で解決されていることがわかります。

于 2009-08-24T11:31:23.227 に答える
20

To resolve by keeping the version in your current branch (ignore the version from the branch you are merging in), just add and commit the file:

git commit -a

To resolve by overwriting the version in your current branch with the version from the branch you are merging in, you need to retrieve that version into your working directory first, and then add/commit it:

git checkout otherbranch theconflictedfile
git commit -a

Explained in more detail

于 2010-01-29T17:43:30.793 に答える
14

mipadiの答えはうまくいきませんでした。これを行う必要がありました:

git checkout --ours パス/to/file.bin

または、マージされているバージョンを維持するには:

git checkout --theirs パス/to/file.bin

それから

git add path/to/file.bin

そして、「git mergetool」をもう一度実行して、次の競合に進むことができました。

于 2014-11-24T02:45:01.247 に答える
5

私は同様の問題に遭遇しました(マージ時に競合を引き起こすバイナリファイルを含むコミットをプルしたい)が、gitを使用して完全に実行できる別のソリューションに遭遇しました(つまり、ファイルを手動でコピーする必要はありません)。少なくとも次回必要になったときに思い出すことができるように、ここに含めることにしました。:) 手順は次のようになります。

% git fetch

これにより、リモート リポジトリから最新のコミットが取得されます (セットアップによっては、リモート ブランチ名を指定する必要がある場合があります) が、それらをマージしようとはしません。FETCH_HEAD にコミットを記録します

% git checkout FETCH_HEAD stuff/to/update

これは、必要なバイナリ ファイルのコピーを取得し、リモート ブランチから取得したバージョンで作業ツリーにあるものを上書きします。git はマージを試みないため、リモート ブランチからバイナリ ファイルの正確なコピーが作成されるだけです。それが完了したら、通常どおりに新しいコピーを追加/コミットできます。

于 2009-07-21T22:29:34.150 に答える
1

バイナリがdllまたは画像のように直接編集できるもの、またはブレンド ファイル以上のものである場合 (そして、いずれかのファイルを破棄/選択する必要はありません)、実際のマージは次のようになります。

たとえば、バイナリファイルを対象とした差分ツールを検索することをお勧めします。たとえば、画像ファイル用の無料のものがあります。

それらを比較します。

ファイルを比較するための diff ツールが存在しない場合、bin ファイルの元のジェネレーターがある場合 (つまり、そのためのエディターが存在する場合... Blender 3d のように、それらのファイルを手動で検査することもできます)ログを見て、何を含めるべきか他の人に尋ねてください) https://git-scm.com/book/es/v2/Git-Tools-Advanced-Merging#_manual_remergeでファイルの出力を行います

$ git show :1:hello.blend > hello.common.blend
$ git show :2:hello.blend > hello.ours.blend
$ git show :3:hello.blend > hello.theirs.blend
于 2015-08-13T21:03:13.720 に答える
1

WindowsでGitを使用してバイナリファイルの差分/マージを管理するための2つの戦略に出くわしました。

  1. Tortoise git を使用すると、ファイル拡張子に基づいて、さまざまなファイル タイプの差分/マージ ツールを構成できます。2.35.4.3 を参照してください。Diff/Merge の詳細設定http://tortoisegit.org/docs/tortoisegit/tgit-dug-settings.html。もちろん、この戦略は、利用可能な適切な差分/マージ ツールに依存しています。

  2. git 属性を使用して、ツール/コマンドを指定してバイナリ ファイルをテキストに変換し、デフォルトの diff/merge ツールにそれを実行させることができます。http://git-scm.com/book/it/v2/Customizing-Git-Git-Attributesを参照してください。この記事では、メタデータを使用して画像を比較する例も示しています。

ソフトウェア モデルのバイナリ ファイルを操作するために両方の戦略を採用しましたが、構成が簡単だったので tortoise git を使用しました。

于 2014-11-27T15:46:40.420 に答える