[Git CLI] Branch & Conflict

4057 단어 생활코딩gitgit

Branch

: 여러 개발자들이 동시에 다양한 작업을 할 수 있게 만들어 주는 기능

git branch : branch의 목록을 보여줌

git branch branch명 : branch 생성

git log --all --graph --oneline : 모든 branch를 시각적 표현하여 보여줌

git checkout branch명 : branch 전환
git branch -d branch명 : branch 삭제


(base) yerinui-MacBook-Pro:manual yeah0325$ git log --all --graph --oneline
* 869ea7f (HEAD -> master) master work 4
* e2c7442 (ms, google, apple) work 3
* d5f6dfc work 2
* 04f7e13 work 1

                         ⬇️

git checkout apple : branch가 apple을 가르키고 work3 상태로 돌아감

                         ⬇️

(base) yerinui-MacBook-Pro:manual yeah0325$ git log --all --graph --oneline
* 869ea7f (master) master work 4
* e2c7442 (HEAD -> apple, ms, google) work 3
* d5f6dfc work 2
* 04f7e13 work 1

→ add, commit 한 결과에 따른 그래프가 보여진다.
→ 공통의 작업을 공유하면서, 각자 자신의 작업을 갖고 있다.

(base) yerinui-MacBook-Pro:manual yeah0325$ git log --all --graph --oneline
* e0ec099 (HEAD -> ms) ms work 4
| * 568c530 (google) google  work 4
|/  
| * fd25eaf (apple) apple work 4
|/  
| * 869ea7f (master) master work 4
|/  
* e2c7442 work 3
* d5f6dfc work 2
* 04f7e13 work 1

merge (병합)

  • base : 합치려고 하는 것들의 공통 조상
  • merge commit : base를 바탕으로 새로운 버전을 만드는 것

cf) git commit --amend : git commit 메세지 수정

  1. 현재 상태가 master branch가 되어야 함
  2. 병합하고 싶은 branch를 merge 명령을 통해 지정
(base) yerinui-MacBook-Pro:manual-merge yeah0325$ git log --all --graph --oneline
* 22f22b8 (o2) o2 work 2
| * 7bf086c (HEAD -> master) master work 2
|/ 
* 15d7861 work 1

                         ⬇️

git merge o2 : 현재 branch와 o2 brench를 병합한 새로운 버전 생성

                         ⬇️

(base) yerinui-MacBook-Pro:manual-merge yeah0325$ git log --all --graph --oneline
*   c170d65 (HEAD -> master) Merge branch 'o2'
|\  
| * 22f22b8 (o2) o2 work 2
* | 7bf086c master work 2
|/  
* 15d7861 work 1

git reset --hard 7bf086c : 리셋하고 싶은 버전 지정


3 way merge

: git이 충돌을 처리하는 방법

💢 합치려는 branch가 다를 경우 충돌이 일어남

herebasethere2 way merge3 way merge
AAAAA
HBB💢H
CCT💢T
HDT💢💢

→ 합치려는 branch 중 하나만 수정되었을 경우 수정된 값으로 변경
→ 2 way와 비교했을 때 훨씬 더 많은 부분을 자동화해서 병합 가능


외부 도구를 이용해서 병합

p4merge 다운

git comfig --global merge.tool p4mergetool
: git의 전역설정으로 mergetool을 p4mergetool로 지정

git config --global mergetool.p4mergetool.cmd \> "/Applications/p4merge.app/Contents/Resources/launchp4merge \$PWD/\$BASE \$PWD/\$REMOTE \$PWD/\$LOCAL \$PWD/\$MERGED" 

cat ~/.gitconfig : git이 어떻게 동작할 지 결정하는 파일

                         ⬇️

[merge]
	tool = p4mergetool
[mergetool "p4mergetool"]
	cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge $PWD/$BASE $PWD/$REMOTE $PWD/$LOCAL $PWD/$MERGED

→ p4mergetool의 경로와 tool을 켤 때 필요한 여러가지 정보를 git이 주입해줄 수 있도록 셋팅

git mergetool : p4mergetool 실행

→ conflict 난 곳 수정후 저장 (자동으로 add 됨)

work.txt.orig : backup 해놓은 파일

좋은 웹페이지 즐겨찾기