작업을 마친 후 저는 로컬 저장소 2곳에서의 브랜치와 원격 저장소에서의 브랜치 모두 삭제하였습니다.
3. 브랜치 주고 받기
저번시간에 gitTest라는 폴더를 회사에서 작업하고,
집에서 gitTest_clone이라는 폴더 안에 gitTest폴더를 클론하여 사용한다고 가정하고 작업을 주고 받는 것을 보여드렸는데요.
마찬가지로 현재 집에 있는 컴퓨터에 gitTest_clone안의 gitTest 폴더에서 위에서 작업한 브랜치를 생성하고 add, commit, push를 마쳤다고 가정하고, 이를 그대로 회사에 있는 컴퓨터의 gitTest폴더에 반영해보겠습니다.
git branch 명령어를 통해 확인해보면 현재 회사 컴퓨터에는 로컬 브랜치인 master 브랜치만 있는 것을 확인할 수 있습니다.
git branch -a
이 명령어를 통해서는 원격과 로컬의 브랜치 모두 확인할 수 있습니다. 하지만 아직 깃에서 반영이 되지 않아 branch1은 뜨지 않네요.
git fetch
명령어를 통해 확인해보면 하나의 new 브랜치가 있다고 뜨는 것을 확인할 수 있습니다. fetch후 다시 git branch -a명령어를 입력하면 모든 브랜치가 뜹니다.
git checkout -b branch1 origin/branch1
이 명령어를 통해 회사에 있는 로컬 저장소에 branch1이라는 이름의 브랜치를 새로 생성하고 origin의 branch1의 작업 상태를 그대로 받아오고 checkout까지 진행합니다.
파일 상태가 로컬에도 반영이 되는 것을 확인할 수 있습니다.
4. 충돌 해결하기
Conflict는 브랜치 간에도 발생하지만, 같은 브랜치에서 같은 파일의 같은 부분을 원격의 두 컴퓨터가 같이 건드린 상황에서도 일어납니다. 많은 깃 사용자들이 이 충돌 문제 때문에 충돌이 일어나면 프로젝트 파일이 날아가거나 사라지거나 문제가 생길까봐 걱정이 많을 텐데요. 그런 점에서 이 충돌을 다루는 방법이 굉장히 중요합니다!!!!!!
예를 들어 A라는 로컬 저장소와 B라는 로컬 저장소가 같은 깃허브 원격 저장소를 이용해 작업하고 있다고 가정합니다. 먼저 A에서 a라는 파일을 작업하여 push하였는데,
아직 B가 pull하지 않은 상황이면서 동시에 a라는 파일을 수정하고 커밋한 상태가 되면 B는 push를 할 수 없는 상황이 되어버립니다. 그래서 B가 이때 pull을 진행하면 Conflict가 발생하게 됩니다.
그럼 한번 고의로 충돌을 일으켜 보겠습니다.
먼저, 테스트를 위해 왼쪽 저장소는 집 컴퓨터에 있는 저장소라고 하고,
오른쪽 저장소는 회사 컴퓨터에 있는 저장소라고 가정합니다.
회사 저장소에 conflictTest라는 파일을 하나 생성하고 aaaaaaa이라고 작성 후, add, commit, push 후
집 저장소에서 pull 하여 줍니다. 그러면 회사와 집 저장소 모두 같은 상태가 되겠죠,
그리고 회사 컴퓨터 저장소에 conflictTest파일에 bbbbbbb을 추가한 뒤,
add, commit, push를 진행해 줍니다.
그리고 집 컴퓨터 저장소에 pull하지 않고 conflicTest파일에는 ccccccc을 추가 한 뒤,
그런 뒤 add, commit, push 하려고 하면 이렇게 pull하라는 error가 표시됩니다.
그래서 pull을 하게되면 이렇게 충돌한 부분이 표시가 되고 pull이 제대로 되지 않는 것을 알 수 있습니다.
git status로 상황을 확인하면 더 자세히 알 수 있습니다.
둘 중 하나만 선택하고, 저장
이 후 add, commit하는데 commit 뒤에 옵션을 붙이지 않고 commit만 입력해줍니다.
그러면 이렇게 머지를 위한 메세지가 뜨는데 :wq를 입력하여 저장해주고,
push하여 마무리해 줍니다.
이렇게 기본적으로 꼭 필요한 깃의 기능들에 대해 알아보았습니다.
사실 깃의 기능은 어마어마 하게 많고, 고급기능도 많이 있지만,
여기까지 사용할 수 있으면 큰 프로젝트가 아닌 이상 깃을 사용하는데 무리가 없을 것입니다.