[Git] git merge and conflict
git merge and conflict
操作が大きくなると、メインノードからブランチが除去されて処理されます.処理終了後にMaster Branchでコンテンツをマージ同じファイルで同じ行に対して行った変更が重複または削除された場合、Gitは自動的にマージできず、競合します.
実際、衝突を避けるためには、コミュニケーションを円滑にすることが重要ですが、多くの人がプロジェクトに参加したり、プロジェクト群が大きくなったりすると、衝突が発生することがよくあります.そのため、ソリューションを理解することが重要です.簡単な例で衝突を解決します~
1.masterでコンテンツを作成してコミットする
# master branch에 파일작성하기
suy2on@YEONui-MacBookPro merge % vi 1.txt
suy2on@YEONui-MacBookPro merge % cat 1.txt
this is merge and conflict test file
this line is written by master
# commit
suy2on@YEONui-MacBookPro merge % git add .
suy2on@YEONui-MacBookPro merge % git commit -m '1st commit in master'
[master (root-commit) 6f9c9a7] 1st commit in master
1 file changed, 2 insertions(+)
create mode 100644 1.txt
2.問題ブランチを開き、同じファイルを修正して提出する
# issue branch 파고 checkout
suy2on@YEONui-MacBookPro merge % git branch issue
suy2on@YEONui-MacBookPro merge % git checkout issue
Switched to branch 'issue'
# 같은 파일 수정
suy2on@YEONui-MacBookPro merge % vi 1.txt
suy2on@YEONui-MacBookPro merge % cat 1.txt
this is merge and conflict test file
this line is written by issue
# commit
suy2on@YEONui-MacBookPro merge % git commit -am '1st commit in issue'
[issue 6ac6a1d] 1st commit in issue
1 file changed, 1 insertion(+), 1 deletion(-)
3.メインブランチに戻り、問題で変更された同じ行を変更します。
suy2on@YEONui-MacBookPro merge % git checkout master
Switched to branch 'master'
# master branch에서는 내용이 그대로입니다
suy2on@YEONui-MacBookPro merge % cat 1.txt
this is merge and conflict test file
this line is written by master
# master branch에서 두번째 줄은 건들지 말라고 적겠습니다
suy2on@YEONui-MacBookPro merge % vi 1.txt
suy2on@YEONui-MacBookPro merge % cat 1.txt
this is merge and conflict test file
this line is written by master, nobody can modify this line
4.問題ブランチをプライマリブランチにマージ
# 충돌발생 : 자동머지에 실패했다고 나오네요 아주자세하게 설명해줍니다!
suy2on@YEONui-MacBookPro merge % git merge issue
Auto-merging 1.txt
CONFLICT (content): Merge conflict in 1.txt
Automatic merge failed; fix conflicts and then commit the result.
5.競合の理解
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: 1.txt
suy2on@YEONui-MacBookPro merge % cat 1.txt
this is merge and conflict test file
<<<<<<< HEAD
this line is written by master, nobody can modify this line
=======
this line is written by issue
>>>>>>> issue
6.mergetool競合の解決
mergetoolを利用して衝突を解決しましょう!
きれいにするために、衝突も見えますし、修復も便利です.複数のタイプが事前に設定されていない場合は、mergetoolから選択を求められます.Vimdiffで作っただけです
suy2on@YEONui-MacBookPro merge % git mergetool
This message is displayed because 'merge.tool' is not configured.
See 'git mergetool --tool-help' or 'git help config' for more details.
'git mergetool' will now attempt to use one of the following tools:
tortoisemerge emerge vimdiff
Merging:
1.txt
Normal merge conflict for '1.txt':
{local}: modified file
{remote}: modified file
Hit return to start merge resolution tool (vimdiff): vimdiff
ウィンドウが開きますこのウィンドウには一度に4つのファイルが表示されます.まず、上の大きい3つのファイルの下に1つのファイルがあります.上の3つは左からLOCAL BASE REMOTEと書いてあります通常Gitで使用される概念とは異なり,BASEは問題分岐を初めて発行したときの状態である.つまり、どちらも修正前の状態です.LOCALは、現在のメインブランチに最終的にマージされるページファイルです.REMOTEは、問題ブランチでマージされたファイルです.一番下のファイルは、最終的にマージするファイルの内容です.
赤は衝突する部分です下部で、最後にマージするファイルにカーソルを置き、まず競合を処理します.
次に<:difg選択状態の最初の2文字>を書き、enterを打つ.マスターを使うことにした内容は、diffg LOこれにより、ドキュメントは自動的にマスターの内容になります.
今逃げるために:wqaと言いましょう.後にaを付けるのは、一度に4つのファイルを保存するためです.
7.連結
競合は解決されましたが、まだマージされていますので、Gitコミットを要求します.commit後のログ表示mergeが正しい🤗
suy2on@YEONui-MacBookPro merge % git status
On branch master
All conflicts fixed but you are still merging.
(use "git commit" to conclude merge)
# commit하기
suy2on@YEONui-MacBookPro merge % git commit -m "merge conpletion"
[master 3fb240e] merge conpletion
suy2on@YEONui-MacBookPro merge % git log
commit 3fb240ef6e7770e6fcbf342f58455effada0884e (HEAD -> master)
Merge: 5c0493b 6ac6a1d
Author: suy2on <[email protected]>
Date: Fri Mar 18 02:06:14 2022 +0900
merge conpletion
8. .origファイル
mergetoolを使用する場合.origファイルが自動的に作成されます.このファイルは、変更前にファイルを保持するために作成されます.gitignoreに挿入してgitトラッキングを防止するか、次のコマンドを使用して最初からファイルを作成しないことができます.
git config --global mergetool.keepBackup false
Reference
この問題について([Git] git merge and conflict), 我々は、より多くの情報をここで見つけました https://velog.io/@rmswjdtn/Git-git-merge-and-conflictテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol