본문 바로가기
프로그래밍/git & github

[220210] 그림으로 끝내는 branch 기본 (생성,삭제,병합)

by 한코코 2022. 2. 10.

 

나는 무조건 그림으로 그려서 눈에 보여야 잘 이해하는 편이다.

분명히 까먹고 이 글로 돌아와서 개념을 찾아볼 나를 위해.


 

 

 

 

 

1.   master branch

가장 먼저, 기본적으로 생기는 메인흐름을 담당하는 branch.

처음 생성시 이름을 바꿔주지 않으면 기본값으로 master라고 이름이 붙여지게 된다.

넘버링 되어있는 원들은 Github에 push를 해서 생성 포인트가 생긴것을 가시적으로 표현한 것이다.

1번 포인트부터 생성되어서 6번 포인트로 흘러간다. (6번이 가장 마지막에 생긴 포인트)

(최초로 Github에 push된 상태를 1번으로 놓고 시작한다고 보면 된다.)

 

 

 

 

 

2.   branch 생성하기

어 그러니까 branch가 뭔데?

혹시 요즘 인기가 많아진 멀티버스 세계관을 안다면 좀 더 이해가 편할 것이다.

예를 들어 동전을 던진다고 할때 여러가지 미래가 생길것을 생각할 수 있다.

 

1. 동전이 앞면으로 떨어진다. 

   1-1. 철수가 내기에서 이겼다.

          1-2. 철수가 기뻐하다 넘어졌다. ( 미래 1 )

          1-2. 철수는 동전을 들고 집에 갔다. ( 미래 2 )

2. 동전이 뒷면으로 떨어진다.

   2-1 새벽이가 내기에서 이겼다.

         2-2. 새벽이는 내기를 한 판 더 했다. ( 미래 3 )

         2-2. 새벽이는 민수에게 돈을 갚았다. ( 미래 4 )

 

선택을 다르게 한 순간부터 다른 사건이 일어난 것으로 생각해 다른 세계로 취급한다.

이렇게 여러 세계관이 존재한다는 것을 기반으로 만들어진게 멀티버스(멀티 유니버스)라고 한다.

 

branch도 같다.

html을 만들었을때, css를 고정형으로 만들까? 모바일도 사용해야하니까 가변성으로 만들까?

메뉴 버튼을 둥글게 만들까? 각지게 만들까?

이런 고민이 들때 branch로 따로 나눠서 진행하면 편하다.

 

다시 돌아오자면, branch를 생성할때는 다음 코드를 사용하면 된다.

git branch branch1

 

 

 

 

 

3.   branch 이동하기

그 branch를 사용하려면 checkout으로 branch1으로 이동한다.

git checkout branch1

 

 

 

 

 

4.   현재 상태 확인하기

작성한 모든것이 변환점이 되므로 자신이 위치한 branch 위치가 어디인지 꼭 확인하고 데이터를 변경해야한다.

git status를 하면 현재 있는 경로 위치뿐만이 아니라, 작성한 파일의 상태와 해결방법도 모두 보여준다.

git status

 

 

 

 

 

 

5.   수정을 마쳤다면 add하기

삭제하기 기능을 가졌지만, 되도록이면 사용하지 않도록 하자.

나쁜건 아니지만 잘못하면 branch가 꼬일 염려가 있다.

git add models/user.js
git reset HEAD models/user.js // add한 파일 취소하기

----

git add .
// 바뀐 모든 파일을 add하고 싶을때

 

 

 

 

 

6.   add 후 commit 하기

삭제하기 기능을 가졌지만, 되도록이면 사용하지 않도록 하자.

나쁜건 아니지만 잘못하면 branch가 꼬일 염려가 있다.

여러 팀원들과 같이 작업할때는 작업노드를 일치시켜야하는데, 중간에 삭제하면 맞추기 힘들어진다.

git commit -m "수정사항 작성"
git log // commit 목록 확인
git reset HEAD^ // commit한 파일 취소
git reset HEAD~2 // commit한 마지막 2개 파일 취소

만약 여태 git log에서 내용을 보고, 그 창에서 나갈때는 q를 누르면 된다.

이동할때는 화살표키나 j로 이동하면 된다.

 

 

 

 

7.   commit 후 push 하기

삭제하기 기능을 가졌지만, 되도록이면 사용하지 않도록 하자.

여러 팀원들과 같이 작업할때는 작업노드를 일치시켜야하는데, 중간에 삭제하면 맞추기 힘들어진다.

git push origin main
git push -f origin main // 강제로 push하기

 

 

 

 

 

8.   원하는 branch를 복제하기

작업하던 폴더가 아닌, 다른 폴더에서 작업했던 폴더기존 라인에 push를 하는건 먹히지 않는다.

branch의 라인을 맞춰줘야 하기때문에 계속하려면 기존 폴더의 작업을 가져와야한다.

방법 1) 폴더 내 내용 (숨김파일 .git까지 포함)을 그대로 복사해오는것

방법 2) 같은 내용을 git에서 끌어서 가져오는것.

원래 작업했던 파일을 끌어오는건 git pull origin master같은 pull을 사용했었다.

하지만 다른 폴더에서 가져오려면 pull이 먹히지 않고, git clone을 사용하면 간편하게 같은 내용을 가진 폴더가 된다.

git clone [깃헙주소] // 새롭게 가져올때
git clone origin main // 이미 연결되어 있는 브랜치에서 가져올때

 

 

 

8-1.   원하는 branch를 복제하기

복제하는 기능을 응용하면 branch이름을 바꿀 수도 있다.

역시 팀별 작업을 할때는 주의해서 사용해야한다.

git branch -m branch3 blueblue //(기존 브랜치 이름) (바꿀 새로운 이름)
git push origin :branch3 //push해서 기존 기록을 밀어버림
git push --set-upstream origin blueblue // 새 브런치를 push

 

 

 

 

 

9.   수정된 사항을 현재 작업 branch에 업데이트 하기

팀별로 작업할때 다른 팀원이 수정한 사항을 업데이트했다면, 나도 가지고 있는 작업파일을 최신으로 업데이트 해야한다.

그럴때 사용하는 명령어다.

단, 현재 위치는 업데이트를 해야할 브랜치 위치여야한다.

만약 아니라면 git checkout로 원하는 위치로 이동한다.

git checkout branch3 //branch3로 위치를 이동함
git pull origin main //main의 내용을 가지고 오고 싶음

 

 

 

 

 

10.   branch 삭제하기

git branch -d branch2

 

 

 

 

 

5. master에 merge하기(합치기)

 

2-1에서 수정한 사항이 에러도 없고 마음에 든다면, 앞으로 쭉 사용하고 싶을 것이다.

그럴때 현재 있는 파일에 합치는 명령어가 merge다.

이때 주의해야 할 것은 내가 현재 있는 위치가 합치고 싶은 흐름 즉, master 이여야한다.

  • ZSH-THEME를 사용하고있다면 맨 오른쪽 화살표에 현재 자신이 어디있는지 알 수 있다.
  • 사용하고있지 않더라도 git status를 터미널에 입력하면 현재 위치를 확인할 수 있다.

위치가 master가 아닐경우 git checkout master로 위치를 바꾸자.

git checkout main //합쳐야할 브런치로 이동
git merge branch1 //합치고 싶은 브런치이름

 

 

댓글