[Git] branch

youngseo·2022년 3월 30일
0

GIT

목록 보기
7/14
post-thumbnail

Branch

Branch란 특정시점으로 부터 분기점을 생성하여 독립적으로 코드를 변경할 수 있도록 도와주는 모델이다. 문자 그대로의 뜻인 나무가 가지를 치는 그림을 떠올리면 조금 더 이해가 쉬울 것이다.

Branch생성

branch를 생성할 때는 그 위에서 어떤 일을 할 것인지를 명시적으로 작성해주어야 한다. 그렇지 않으면 branch에서 어떤 일을 했는지 다시 다 뜯어봐야하게 되는 문제가 생긴다.

또한 분기점이 생기는 상황들은 항상 commit을 기준으로 움직인다고 생각하는 것이 좋다.

$ git branch // *main
$ git branch hello // 현재 있는 최신 commit으로부터 분기점을 생성한다.
$ git branch //*main  hello

//이동(구버전)
$ git checkout hello [checkout은 복구, 이동 의 액선을 가짐] => 두개로 나눔(switch, restore)
$ git branch

//이동(최신)
$ git switch hello
$ git branch  // main   *hello

branch이동

  • 기존에는 checkout을 통해 branch를 이동했지만, checkout이 복구와 이동의 두가지 액션을 가지고 있기 때문에 두가지 액션을 분리하게 되었다. 이동의 경우 switch, 복구의 경우 restore로 사용할 수 있다.

Branch 이해

branch의 독립적 상태 확인

hello branch 위에서 작업

$ vi branch.py   //작성 내용: print('hello')
$ cat branch.py  // print('hello')
$ python3 branch.py // hello
$ git add branch.py  
$ git commit -m "feat: Print 'hello'"

main brnach 위에서 작업

$ git switch main
$ cat branch.py // 출력결과가 없다.
$ python3 branch.py // 출력결과가 없다.

코드 병합 (merge)

코드 병합의 경우 당긴다라고 생각하면 이해가 조금 더 쉽다. 만약, hello라는 브랜치에서 작업한 내용을 mian 브랜치로 당겨오고 싶은 경우 main 브랜치에서 코드 병합을 진행해주면 된다.

$ git branch // *main 확인

//코드 병합
$ git merge hello

// hello 브랜치 삭제
$ git branch -D hello

$ cat branch // print('hello')

브랜치 삭제

  • git branch -D hello
  • branch를 지우는 경우는 브랜치의 라이프사이클이 다 되었거나 잘 못 되었을 경우이다. 또한 브랜치는 주기적으로 지우며 진행을 하는 것이 좋다.
  • 브랜치가 병합된 후라면 브랜치가 삭제되더라도 코드는 남아있게 된다.

코드 병합 충돌 (merge completed)

$ git branch  //*main

// repeat-hello 브랜치 생성 및 코드 작성
$ git branch repeat-hello
$ vi repeat-hello

// 생성 확인
$ git branch //*main  repeat-hello

// main브랜치의 branch.py 파일 수정
$ vi branch.py
$ cat brnach.py  
			//i =3
            if i%3==0;
                print('hello')
$ python3 branch.py
			//hello
            
$ git status
$ git add branch.py
$ git commit -m "feat: Add if Statement"

//repeat-hello 브랜치로 이동
$ git switch repeat-hello
$ vi branch.py
			// for _ range(10):
            		print('hello')
$ python3 branch.py  // hello 10번 출력
$ cat brnach.py 

$ git add branch.py
$ git commit -m "feat: Add for Statement" 

//코드병합
$ git switch main
$ git merge repeat-hello //CONFICT 충돌이 났음을 알린다.
$ vi branch.py //brnach.py를 열어 확인

repeat-hello브랜치에서는 hello를 출력하는 코드를, main 브랜치에서는 hello를 10번 출력하는 코드를 작성했다.(기존 branch.py 코드 : print('hello')

병합을 하게 되면 git은 아래와 같이 충돌난 코드 부분만 따로 알려주게 된다. 이를 merge completed라고 한다.

<<<< HEAD
i = 3
if i%3==0:
======
for _ in range(10):
>>>>>>>> repeat-hello
	print('hello')

코드 수정 후 git status를 통해 확인해보면, both modified: branch.py라는 안내문구로 아직 merge가 끝나지 않은 상태임을 확인할 수 있다. merge가 완벽하게 끝나기 위해서는 코드 수정 후 git addgit commit 작업까지 완료를 해주어야한다.

단, 코드 충돌 병합 후에는 자동으로 commit내용이 수정되어 들어가기 때문에 $ git commit -m을 통해 commit을 진행해서는 안된다. 만약, -m플래그를 통해 commit을 하게 되는 경우 그 내용까지 덮어쓰게 된다.

$ git add branch.py
$ git commit  
$ git push origin master

0개의 댓글