반응형

최근 git을 사용하면서 추가버전을 롤백하게 되어 과거버전으로 돌아가야 할 일이 생겼습니다.

기존에 사용하던 svn은 여러가지 기능 중 히스토리를 확인하여 날짜를 선택하고 손쉽게 과거로 돌아가 그때부터 다시 commit을 치고 update를하면서 사용 할 수 있었지만 지금 사용하는 git은 그런방법으로 처리하는게 쉽지 않았고 처리 방법으론 과거 commit을 찾아서 해당 commit영역을 checkout 한 후 branch를 새롭게 만들어서 사용하는 방법을 채택하여 사용중에 있습니다.

 

이 과정을 겪으면서 branch에 대해 알아볼 필요성이 생겼고, 간단하게 branch의 사용법을 확인 후 처리했던 방법을 포스팅 해보고자 합니다.

 

GIT - branch

branch만들기

git branch <name>

"git branch 브랜치명"를 통해 브랜치 생성할 수 있습니다.

브랜치 생성

 

 

branch 목록 확인하기

git branch

"git branch"를 통해 브랜치 리스트를 확인 할 수 있습니다.

브랜치 목록 확인

 

 

사용하는 branch 변경하기

git checkout <branch>

"git checkout 브랜치명"을 통해 사용할 브랜치를 바꿀 수 있습니다.

브랜치 변경

 

 

새 브랜치에 소스 올리기

브랜치를 새로 만들어서 변경까지 했다는건 이 부분부터 새로운 소스로 개발을 진행하겠다는 뜻이겠죠?

여기서 소스를 약간 수정하고 add 후 commit을 해서 push까지 진행해보겠습니다.

 

저는 index.html만 약간의 수정을 했습니다.

index.html수정

 

아래 명령을 통해 전부 add해주시고 commit 메시지를 남깁니다.

git add .
git commit -m "브랜치 변경"

소스를 수정 후 commit

push도 진행합니다.

git push origin psw

이번엔 변경된 브랜치명인 psw로 올립니다. (master -> psw)

전 저장소를 연결할 때, origin으로 만들었습니다.

git서버에 push

정상적으로 변경된 branch로 올라간 모습을 확인 할 수 있습니다.

 

 

fork툴을 활용한 git 처리 확인

fork라는 툴을 활용해서 git을 사용하고 있는데 아무래도 gui를 제공하다보니 commit 메시지도 보기 좋고 현재의 브랜치상태나 올린사람등을 쉽게 파악할 수 있어 애용하고 있는 프로그램입니다.

 

이렇게 새로운 브랜치를 만들어서 추가된 것을 볼 수 있습니다.

 

 

브랜치 병합하기(merge)

git merge <commit>

병합을 할 땐, "git merge 브랜치명"의 명령어를 통해 merge합니다.

 

 

git checkout master

지금까지 따라오셨다면 commit의 헤드는 psw에 처리되어 있을텐데, 다시 master로 변경해보겠습니다.

 

 

git merge psw

아까 branch를 변경할땐 checkout이라고 했었죠? master로 브랜치를 바꿨으면 합병을 해보겠습니다.

합병 명령어를 입력합니다.

 

 

그러면 아까 psw에서 처리했던 commit이 합병되는 것을 볼 수 있습니다.

비어있던 index.html

위 캡처처럼 master브랜치의 index.html은 비어있었는데, merge를 하자 아래처럼 바뀌어있습니다.

master 브랜치로 합병

 

master 브랜치로 psw 브랜치에서 처리했던 소스가 합병된 모습을 볼 수 있습니다.

 

 

브랜치 삭제하기

psw의 소스는 합병도 되었고 더이상 쓸모가 없어졌을 경우 브랜치를 지워줘야겠죠?

엄청 많은 브랜치들이 존재하면 어떤건 개발이 끝난거고 어떤건 쓰는건지 구분이 안될 수 있을 것 같습니다.

git branch -d <name>

"git branch -d 브랜치명"을 통해서 브랜치를 삭제 할 수 있습니다.

psw를 삭제해보겠습니다.

 

 

git branch -d psw

psw브랜치 삭제

psw브랜치가 삭제되었습니다. 삭제가 되었는지 브랜치 리스트 확인 명령어를 통해 확인해보겠습니다.

 

 

git branch

master만 남아있다.

잘 삭제되어서 master만 남아있는 모습입니다.

 

 

gui툴인 fork에선 아래처럼 변화가 있습니다.

 

브랜치를 삭제하기 전 mster, psw가 같이 붙어있다.

 

합병으로 인해 브랜치가 지저분하게 붙어있습니다. 삭제 후에는 아래처럼 바뀝니다.

master브랜치만 남아있다.

 

 

여러개의 브랜치 사용하기

여러개의 브랜치 생성하기

psw1, 2를 만들어서 작업하는 상황을 만들어보겠습니다.

git branch psw1
git branch psw2


git checkout psw1

psw1, 2를 만들고 psw1의 브랜치를 사용하도록 하였습니다.

현재 브랜치 리스트

 

 

index2.html 추가

html을 추가하였고, 내부에 간단하게 소스를 작성하였습니다.

이제 서버에 올려보겠습니다.

 

git add .

git commit -m "index2.html 추가"

git push origin psw1

psw1브랜치에서 index2,html 생성 후 commit

psw1브랜치에서 파일을 생성하였고 commit까지 정상적으로 처리하였습니다.

 

psw2브랜치 사용하기

이제 psw2브랜치로 변경해보겠습니다.

git checkout psw2

index2.html이 사라졌다.

브랜치가 변경되었고 생성하였던 index2.html은 사라졌을겁니다. 동일하게 생성해서 psw1브랜치에서 생성했던 소스와 다르게 작성해보세요.

 

파일을 생성하고 소스를 다르게 작성하였다면, 서버에 동일하게 commit을 하겠습니다.

git add .

git commit -m "psw2 branch - index2.html 추가"

git push origin psw2

psw2브랜치에서 commit

 

여기까지 상황을 만들었으니 이제 master에 병합처리를 해보겠습니다.

 

 

여러개의 브랜치 병합과 충돌 발생 해결하기

master브랜치로 checkout합니다.

git checkout master

master 브랜치로 checkout

브랜치를 변경하였으니, 앞에서 배운 merge명령어를 통해 병합해보겠습니다.

 

 

git merge psw1

merge명령어를 통해 합병합니다. psw1의 브랜치부터 했습니다.

psw1브랜치 병합

바로 이어서 psw2브랜치도 병합해보겠습니다.

 

 

git merge psw2

psw2브랜치까지 병합

병합을 하고나면 index2.html이 정상적이지 않은 데이터로 병합된 걸 볼 수 있습니다.

 

충돌이 발생하였다!

바로 충돌이 발생하였기 때문입니다. psw1에서 합병할때는 문제없이 merge 되었을텐데, psw2의 브랜치를 병합하면서 먼저 받았던 index2.html의 소스부분이 서로 꼬였기 때문입니다.

<<<<<<<HEAD부분은 기존의 마스터가 가지고 있던 소스부분이고

=======기준부터

>>>>>>>psw2까지는 psw2의 브랜치를 받으면서 충돌이 발생한 부분입니다.

 

 

지금은 소스가 매우 간단하고 충돌난 부분이 해당 부분밖에 없어서 간단하게 해결이 가능하지만

여러부분이 충돌이 났을 경우엔 모든 충돌 위치를 찾아서 병합할 부분을 고쳐주셔야 합니다.

 

원하는 소스로 병합처리를 하고 소스를 다시 올려보도록 하겠습니다.

소스 병합처리 완료

 

 

git add .

git commit -m "merge end"

git push origin master

merge 종료

정상적으로 처리가 끝났습니다.

 

fork에서 작업내역 확인

gui툴인 fork에서 확인해보면 좀 더 한눈에 작업내역이 보입니다.

psw1브랜치에서 index2.html을 생성하여 소스를 작성하고 올렸고

psw2브랜체에서도 동일하게 생성 후 소스를 올렸으며, master가 병합처리를 끝낸 히스토리를 컴밋 메시지를 통해 볼 수 있습니다.

반응형