항상 git branch를 관리하다보면 개발중인 코드를 dev 또는 master에 merge를 해야되는 경우가 생긴다.

 

이럴 때 항상 헷갈리는 것이 바로 "어떤 브랜치를 남겨놓고 어떤 브랜치가 사라질 것인가?" 이다. 

 

대다수의 사람들이 위와 같은 궁금증으로 git merge에 대해 검색할 것이라고 생각한다.

 

이 참에 해당 내용에 대해 정리하고자 한다.

 

 

기본적으로 우리는 만들어진 각 브랜치에서 작업을 하다가 완료가 되는 시점이 오면 브랜치 작업을 마무리 하고 기존 브랜치에 합쳐야 한다. 이 과정을 바로 "git merge" 브랜치 병합이라고 한다.

 

아래 그림과 같이 master branch에 dev branch를 병합해야 한다면 

 

즉, master브랜치를 남기고, dev브랜치를 없애려면

 

다음과 같이 진행하면된다.

 

git checkout master #먼저 남길 branch로 이동한다.

git merge dev # master branch에 dev브랜치를 merge한다.

#큰 이상이 없으면 vim이 실행되고, 자동으로 commit이 생성된다. 그러면 esc버튼을 누르고 'wq'입력!

git log # log를 확인하면 merge가 된것을 확인할 수 있다.

 

 

 

 

 지난 시간까지 git의 버전 관리하는 방법에 대해 알아보았습니다. 이번 시간부터는 git에서 용도에 따라 버전을 구분 지어주는 branch에 대해 알아보도록 하겠습니다. 

 

1. git branch


① git branch란?

git branch란 나뭇가지처럼 기존의 기능을 유지하면서 용도에 따라 신규기능을 추가하고 싶을 때 해당 git을 여러 갈래로 나눠주는 것을 이야기합니다. 추후에는 나눠진 가지를 다시 합쳐주는 것도 가능하고요. 

② git branch를 만드는 방법 (git branch)

git branch를 만드는 방법은 다음과 같습니다. 

git branch <만드려는 branch 이름>

만들어진 branch를 확인하는 방법은 

git branch

 

③ git branch를 이동하는 방법 (git checkout)

그럼 기능 추가를 위해 branch를 이동하는 방법에 대해 말씀드리겠습니다. 

git branch checkout <목적 branch>

이동을 하게되면 git의 head가 목적 branch로 변경된 것을 볼 수 있습니다. 

 

이번 시간에는 branch의 기본 개념과 사용방법에 대해 알아보았습니다. branch는 동료들과 협업을 진행할 때 매우 필요한 작업으로 반드시 알아두어야 합니다. 다음 시간에는 정말 중요한 merge기능에 대해 알아보도록 하겠습니다. 

 

추가적으로 궁금하신 사항 있으면 댓글로 남겨주세요 :) 

 

*Reference

- "지옥에서 온 문서 관리자 깃&깃허브 입문" 이지스버블리싱 - 이고요, 고경희 지음

 

 

부족한 글이지만 읽어주셔서 감사합니다. 

 이전 시간에 git reset에 대해 학습했었죠. git reset <커밋 해시>는 해당 해시로 버전을 이동하면서 해당 버전 이후에 만들어진 버전들은 모두 삭제한다는 점이 가장 큰 특징이었는데요. 추가로 --hard 옵션을 추가해야 Working Tree에 있는 파일들까지 해당 커밋 버전에 맞게 변경된다는 점을 꼭 기억하셔야 됩니다. 이번 시간에는 커밋 정보를 삭제하지 않고 이전 버전으로 돌아가는 git revert 명령어에 대해 알아보겠습니다. 

 

 

1. git revert


 git revert 명령어는 취소하려는 커밋 해시를 지정해주고 해당 커밋 해시를 취소하게 됩니다. git reset 뒤에 지정하는 커밋 해시로 돌아가는 것과는 다르죠. git revert는 취소하려는 커밋 해시를 지정하면 해당 커밋 해시를 취소하였다는 커밋을 새롭게 만들어 줍니다.(취소한 버전을 새롭게 만든다는 게 git revert의 커밋 취소 원리입니다. ) 쉽게 말해 취소한 이력을 버전을 만들어 기록하는 것이죠.

 

그럼 이제부터 git revert 사용 방법에 대해 예시를 통해 알려 드리도록 하겠습니다. 

먼저 git log를 통해 현재 커밋들을 확인합니다. 

 $ git log --oneline --graph

그리고, 취소하려는 커밋을 확인합니다. (저는 a 커밋을 취소하겠습니다.)

$ git revert f2e779b

 그러면 중간에 아래와 같이 해당 커밋을 취소하며 변경된 사항과 그 내용을 담은 커밋을 생성하게 됩니다. 해당 내용들을 확인하고 이상이 없으면 ":"를 누르고 "wq"를 통해 저장해주면 해당 커밋을 취소한 새로운 커밋이 생성되게 됩니다. 

남들과 협업을 하게 될 때 git을 사용하게 되는 경우가 있는데 만약 취소나 변경사항이 생길 경우 git reset을 사용하는 것보다 git revert를 사용하는 것이 훨씬 안정적이므로 꼭 까먹지 않았으면 좋겠습니다. 

 

 

 

*Reference

- "지옥에서 온 문서 관리자 깃&깃허브 입문" 이지스버블리싱 - 이고요, 고경희 지음

-

-

 

부족한 글이지만 읽어주셔서 감사합니다. 

 

 지금까지 저희는 버전을 생성하는 방법에 대해 알아봤습니다. 생성된 버전이 잘못되었을 때 이전 버전으로 돌아가려면 어떻게 해야 할지 알아보겠습니다. 이전 버전으로 돌아가는 명령어는 git reset과 git revert가 있습니다. 그중에서 이번에는 git reset에 대해 알아보겠습니다.

 

1. git reset


 첫 번째로 배울 명령어는 git reset입니다. git reset <커밋 해시> 는 "해당 커밋으로 돌아가겠다" 라는 의미입니다. 단, 추후에도 말씀 드리지만 reset을 하게되면 돌아가려는 커밋 이후로 생성되었던 버전들은 사라지게 되므로 주의하셔야 됩니다. 

사용 방법은 git reset <커밋 해시>입니다. <커밋 해시> 부분에 돌아가려는 커밋 정보를 적어주시면 되는데요. 아래 예시를 참조하시면 좀 더 이해가 쉬울 거예요. 

 

1) 먼저 원하는 커밋 정보를 찾기 위해 git log --oneline --graph 명령어를 사용하였습니다.

2) git reset 70aa89f 명령어를 사용하여 원하는 버전으로 되돌리기

3) log 정보를 한번 더 사용해보면 head는 70aa89f 커밋으로 이동되어있고, 그 이후에 작성되었던 버전들은 없어져있는 것을 볼 수 있습니다. 

여기서 중요한 사실은 이동한 버전 이후에 생성된 버전은 모두 없어졌다는 점과 커밋은 돌아갔으나, Working Tree의 파일 내용은 변경이 되지 않았다는 것입니다.  cat명령어를 사용하여 A.txt 파일 내용을 살펴보면 파일의 내용은 그대로임을 알 수 있습니다.  

 우리는 git reset <커밋 해시>는 default로 원하는 커밋 해시로 돌아가나, 파일의 내용까지 변경하지 않는다는 것을 알 수 있는데요. 파일의 내용을 해당 커밋의 내용으로 변경하는 방법에는 두 가지가 있습니다. 첫 번째는 git reset에 옵션을 추가하는 방법 : git reset --hard <커밋 해시> 두 번째는 git restore <file name>을 통해 수정 사항을 삭제하는 방법입니다. 

 

 첫 번째 방법 git reset --hard <커밋 해시> 예시를 보여드리겠습니다. 

git reset --hard <커밋 해시>를 사용하면 아래 보시는 바와 같이 A.txt의 내용이 변경된 것을 볼 수 있습니다. --hard 옵션을 넣게 되면 해당 커밋으로 변경되며 파일 수정사항 또한 해당 커밋으로 변경되게 됩니다. 

 

추가로, git reset 옵션에 대해 적어놓으니 reset사용 시 참고하시면 좋을 것 같습니다. 

명령어 내용
git reset –soft <커밋해시> 원하는 버전으로 돌아가나, 파일 내용은 변함이 없음. commit하기 전상태로 변경됨
git reset –mixed <커밋해시> 원하는 버전으로 돌아가나, 파일내용은 변함이 없음. add하기 전 상태
git reset –hard <커밋해시> 원하는 버전으로 완전 돌아감

 

 

 두 번째 방법인 git restore <file name>은 현재 커밋과 Working Tree의 파일 간 변경사항이 있을 때, file의 변경 사항을 커밋에 저장되어있는 파일 내용으로 되돌려 주는 명령어입니다.

 

아래 예시와 같이 현재 커밋에 수정된 파일 A.txt 있을 때 git restore <file name>을 사용해주면 A.txt의 "add context"라는 내용이 현재 커밋에 저장된 A.txt의 내용으로 변경됩니다.(현재 커밋에서 A.txt 파일에는 아무 내용이 없으므로 안 읽힘)

 

 

 

*Reference

- "지옥에서 온 문서 관리자 깃&깃허브 입문" 이지스버블리싱 - 이고요, 고경희 지음

-

-

 

부족한 글이지만 읽어주셔서 감사합니다. 

 

+ Recent posts