Git を使用してファイル全体に対して「彼らの承認」または「私の承認」を行うシンプルなツール 質問する

Git を使用してファイル全体に対して「彼らの承認」または「私の承認」を行うシンプルなツール 質問する

視覚的なマージ ツールは不要ですし、競合するファイルを vi で操作して、HEAD (私の) とインポートされた変更 (相手の) を手動で選択する必要もありません。ほとんどの場合、必要なのは相手のすべての変更か、自分のすべての変更のどちらかです。通常、これは私の変更が上流に伝わり、プルによって私に戻ってくるものの、さまざまな場所でわずかに変更されている可能性があるためです。

競合マーカーを取り除き、私の選択に基づいてすべてを何らかの方法で選択するコマンドラインツールはありますか? または、各コマンドを実行するために自分自身にエイリアスを付けることのできる一連の git コマンドはありますか?

# accept mine
alias am="some_sequence;of;commands"
alias at="some_other_sequence;of;commands"

これを行うのはかなり面倒です。「受け入れる」については、次のことを試しました:

randy@sabotage ~/linus $ git merge test-branch
Auto-merging Makefile
CONFLICT (content): Merge conflict in Makefile
Automatic merge failed; fix conflicts and then commit the result.

randy@sabotage ~/linus $ git checkout Makefile 
error: path 'Makefile' is unmerged

andy@sabotage ~/linus $ git reset --hard HEAD Makefile 
fatal: Cannot do hard reset with paths.

これらの変更マーカーをどうやって取り除けばいいのでしょうか?

できます:

git reset HEAD Makefile; rm Makefile; git checkout Makefile

しかし、これはかなり回りくどいようです。もっと良い方法があるはずです。そして、この時点では、git がマージが行われたと認識しているかどうかさえわかりません。したがって、これが必ずしも機能するとは思えません。

逆に、「彼らのものを受け入れる」を実行するのも同様に面倒です。私が理解できる唯一の方法は、次のとおりです。

git show test-branch:Makefile > Makefile; git add Makefile;

これにより、Conflicts: Makefile が 2 回含まれる、おかしなコミット メッセージも生成されます。

上記の2つのアクションをより簡単な方法で実行する方法を教えてください。ありがとうございます

ベストアンサー1

解決策は非常に簡単です。インデックスgit checkout <filename>からファイルをチェックアウトしようとするため、マージに失敗します。

必要なのは(コミットをチェックアウトする)ことです:

独自のバージョンをチェックアウトするには、次のいずれかを使用できます。

git checkout HEAD -- <filename>

または

git checkout --ours -- <filename>

(警告: リベースして--oursスワップ--theirsしている場合)

または

git show :2:<filename> > <filename> # (stage 2 is ours)

他のバージョンをチェックアウトするには、次のいずれかを使用できます。

git checkout test-branch -- <filename>

または

git checkout --theirs -- <filename>

または

git show :3:<filename> > <filename> # (stage 3 is theirs)

解決済みとしてマークするには、「add」を実行する必要もあります。

git add <filename>

おすすめ記事