web-dev-qa-db-ja.com

Gitとコマンドラインを使用して、マージ中にローカルファイルまたはリモートファイルを保持する方法

Vimdiffを使用して変更をマージする方法は知っていますが、ファイル全体を保持するか破棄するのが良いことを知っていると仮定して、どうすればよいですか?

それぞれについてvimdiffを開きたくありません。「ローカルに保つ」または「リモートに保つ」というコマンドを変更します。

E.G:誰かがウィンドウの下でそれを開き、EOLを変更してからコミットしたため、変更済みとしてマークされたファイルとのマージを取得しました。マージするとき、私は自分のバージョンを保持し、彼を破棄したいだけです。

私も反対に興味があります:私は大きな時間を台無しにして、リモートファイルを受け入れ、変更を破棄したいです。

169
e-satis

あなたもできる:

git checkout --theirs /path/to/file

リモートファイルを保持します。

git checkout --ours /path/to/file

ローカルファイルを保持します。

その後、git addそれらとすべてが完了します。

264

このアプローチはより簡単で、各ファイルを個別に選択する必要がありません。

# keep remote files
git merge --strategy-option theirs
# keep local files
git merge --strategy-option ours

または

# keep remote files
git pull -Xtheirs
# keep local files
git pull -Xours

直接コピー: プル中の変更を優先してGitマージの競合を解決

83
keflavich

git checkout {branch-name} -- {file-name}

これにより、選択したブランチのファイルが使用されます。

posh-gitオートコンプリートがこれでうまく機能するため、これが気に入っています。また、どのブランチがリモートで、どれがローカルであるかについてのあいまいさもなくなります。とにかく--theirsは機能しませんでした。

12
Ben Wilde

行末のことについては、man git-mergeを参照してください:

--ignore-space-change 
--ignore-all-space 
--ignore-space-at-eol

必ずautocrlf = falsesafecrlf = falseをWindowsクローン(.git/config)に追加してください

Git mergetoolを使用する

このようにmergetoolを構成する場合:

git config mergetool.cp.cmd '/bin/cp -v "$REMOTE" "$MERGED"'
git config mergetool.cp.trustExitCode true

その後、単純な

git mergetool --tool=cp
git mergetool --tool=cp -- paths/to/files.txt
git mergetool --tool=cp -y -- paths/to/files.txt # without prompting

仕事をする

単純なgitコマンドを使用する

その他の場合、私は仮定します

git checkout HEAD -- path/to/myfile.txt

トリックを行う必要があります

編集を逆に実行する(間違えたため):

git checkout remote/branch_to_merge -- path/to/myfile.txt
9
sehe