Git で強制上書きとマージ

Abdul Jabbar 2022年2月6日
Git で強制上書きとマージ

ほとんどの場合、git push または git merge を適用すると、最終的には何らかの競合が発生します。場合によっては、競合をマージするための解決策は、ローカルの変更やリモートまたは他のブランチの変更を破棄するのと同じくらい簡単です。

Git が 2つの競合する変更をマージする方法を理解できない場合、競合リクエストを作成します。競合リクエストは、問題を説明する特別な種類のパッチであり、競合する変更の両側(私たちとその変更)とマージ試行の結果が含まれています。

チームの 2 人のメンバーが同じファイルで作業していて、そのファイルで競合が発生しているときに、Git はその競合を作業ファイルに適用します。その後、結果のファイルを編集でき、Git が変更を記録します。競合する変更が発生した場合、Git はファイルを競合状態としてマークします。その特定のブランチの競合を解決するためのいくつかのコマンドがあります。

競合は、2 人以上が同じリポジトリ内の同じファイルで作業している場合に最も一般的です。ただし、ファイル内で競合が見つかった場合、Git はそれを非常に優れた方法で解決する方法について非常に賢くインテリジェントです。Git は競合マーカーを使用して、ファイルのどの部分が競合しているかを示します。競合マーカーは、ファイルの競合セクションの両側に配置される小さなハッシュです。

プルは単独では使用されません。これは、リモートサーバーからデータをフェッチし、ローカルリポジトリの変更とのマージを適用することで使用されます。必要に応じて、以下の 2つの操作を実行できます。

git fetch
git merge origin/$CURRENT_BRANCH

上記の origin/$CURRENT_BRANCH は以下を意味します。

  • Git はマージオプションを適用し、リモートリポジトリからの変更、つまり origin を適用します。
  • そしてそれが $CURRENT_BRANCH に追加されます
  • 現在、ローカルのチェックアウトブランチには存在しません

git pull が推奨されるだけでなく、git fetch の後に git merge を実行するだけです。3つのマージを実行します。これにより、Git は 3つのフェッチ操作を実行します。必要なのは 1つのフェッチだけです。

git fetch origin   # it will update all our origin/* remote-tracking branches
git checkout new branch        
git merge origin/new branch     
git checkout master
git merge origin/master
git merge -X theirs new branch  
git push origin master   

上記のコマンドは、マージ元のブランチで異なる変更を事実上無視し、マージ先のブランチで新しいコミットを開発します。ここで、コミットはすべてマージされます。

また、通常のマージで --ours を使用して、マージ元のブランチ内のすべての変更をマージし、マージ先のブランチに存在するファイルをスキップして、2つの間で 3 方向のマージを効果的に実行することもできます。ブランチしてから、マージ先のブランチのファイルを使用します。

git merge --ours を使用してファイルをマージしてから、git rebase -i を使用して、マージ元のブランチからの変更を手動で再適用する方がはるかに簡単であることがわかりました。

上記のコマンドは、競合のあるファイルでは機能しませんが、次のコマンドで競合を解決できることがわかりました。

git checkout file_with_conflict
git merge --ours --no-commit file_from_branch_with_conflict
git reset --hard git add file_with_conflict git commit -m 
著者: Abdul Jabbar
Abdul Jabbar avatar Abdul Jabbar avatar

Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.

LinkedIn

関連記事 - Git Merge