11.1 Git의 브랜치
Git에서 브랜치(branch) 작업하기는 버전 관리를 할 때 중요한 부분 중 하나로, 하나의 리포지토리에서 여러 개발 라인을 병행할 수 있게 해줘. 브랜칭은 Git을 협업, 실험 및 프로젝트의 여러 버전을 관리하는 강력한 도구로 만들어줘.
Git의 브랜치를 폴더와 같이 생각해도 돼, 여기서 Git은 너의 프로젝트를 복사해. 너의 프로젝트의 메인 폴더가 너의 로컬 리포지토리에 있어 — master, 그리고 Git은 이 폴더를 복사해서 시험해보도록 하고, 잘 작동하는 주 코드를 망치지 않도록 해줄 수 있어. 이런 폴더 복사를 브랜치 — branches라고 불러.
브랜치는 코드의 대안이야. 예를 들어, 큰 프로젝트에서 뭔가를 변경하고 싶거나, 완전히 확신하지 않는 실험을 하고 싶다고 쳐. Git 없이 어떻게 할까?
프로젝트를 다른 폴더에 복사하고 거기서 모든 것을 시도해보는 방법도 있겠지. 결과가 마음에 들면 주 폴더로 복사하고, 마음에 들지 않으면 잊어버리거나 아예 삭제할 수도 있어.
또는 실생활에서 예를 들어볼게. 책을 쓰는 과정 같아:
- 책의 원고가 있어 (메인 브랜치).
- 결말을 바꿔보고 싶어 (새 브랜치 생성).
- 새 결말을 다른 문서에 써 (새 브랜치에서 작업).
- 새 결말이 더 낫다면, 원고에 기존 결말을 대체해 (브랜치 병합).
- 새 결말이 있는 문서를 삭제해 (브랜치 삭제).
11.2 브랜치 생성하기
IntelliJ IDEA에서 브랜치를 만드는 것은 아주 쉬워:
브랜치 이름을 입력해:
IntelliJ IDEA는 메뉴 상단에 현재 브랜치 이름을 바로 보여줘:
그 전에 뭐였을까?
첫 번째이자 메인 브랜치 — master 이름이 있었어.
이제는 test가 표시되는데, 이것은 Git이 (IntelliJ IDEA의 지도 아래에서) 새로운 브랜치를 만들고 바로 그곳으로 전환되었다는 것을 의미해.
이제 현재 브랜치(test)에서 main.html 파일에 뭔가 코드를 추가하고 커밋하자:
11.3 브랜치 간 전환
1단계. 브랜치를 선택해.
이제 이전 브랜치로 전환해 볼게. 상단 메뉴를 클릭하고 무엇이 보이는지 보자:
겁먹지 마 — 여기서 모든 게 간단해:
Local — 이것은 너의 로컬 git 리포지토리의 브랜치 목록이야. 여기 두 개가 있어:
- test
- master
Remote — 이것은 GitHub 서버에 있는 너의 원격 리포지토리야. 우리가 변경사항을 푸시했지만, 새로운 브랜치는 없다고, 당연하지. 원격 리포지토리의 이름은 origin이고, 여기에 있는 건 master 브랜치뿐이야.
Recent — 이건 그냥 최근에 작업했던 브랜치 이름들의 목록이야: 이 항목은 IntelliJ IDEA가 편리성과 속도를 위해 추가한 거야.
이름 origin/master는 로컬 리포지토리가 현재 동기화된 원격 리포지토리의 이름이고, 변경사항이 푸시될 곳이야.
2단계. 현재 폴더에 브랜치의 코드를 내려 받아.
3단계. 확인해.
나는 'master' 브랜치와 오래된 코드가 표시돼:
11.4 브랜치 병합
이제 두 브랜치의 코드를 합쳐 보자.
1단계. 우선 프로젝트에 새로운 파일을 하나 더 추가하자 — index.html 그리고 거기에 코드를 작성해:
- index.html 파일 생성해
- 코드 <h1>Hello</h1> 작성해
- 파일 커밋해
master 브랜치에서 내 두 개의 파일은 이렇게 보여:
2단계. 브랜치 병합.
test 브랜치에서 변경된 내용을 현재 브랜치(master)에 합쳐보자.
이것도 상단 메뉴와 ‘Merge ‘test’ into ‘master’’ 명령어를 사용해 해보자:
3단계. 결과 확인.
확인해보자:
- 상단에 여전히 master 브랜치가 표시돼
- 파일이 두 개 있어: index.html과 main.html
- main.html 파일에는 test 브랜치에서 추가된 코드가 포함돼있어
11.5 병합 시 충돌
가끔 브랜치를 병합할 때 충돌이 발생할 수 있어.
만약 다른 브랜치에서 같은 파일에 변경을 하고 이를 병합하려고 하면 충돌이 생길 수 있어.
텍스트 파일 충돌
Git은 아주 똑똑한 시스템이야 — 파일 타입을 이해해. 텍스트 파일로 간주되는 파일의 다른 부분을 변경하면, Git은 한 파일에서 다른 파일로 변경사항을 적절한 위치로 자동으로 옮겨줘 (사람이 하듯이).
바이너리 파일 충돌
하지만 이미지나 문서를 수정하면, Git은 그들의 일부를 하나로 합치려고 하지 않고, 어느 버전을 현재 브랜치에 남길지 선택하도록 할 거야.
수동으로 충돌 해결
텍스트 파일의 동일한 위치에 변화를 주면, Git은 서로 다른 버전을 제대로 병합할 수 없어, 너에게 해결하라고 할 거야:
이것이 어떻게 보일 수 있는지 보여줄게:
여기서 무엇을 볼 수 있는지:
- 왼쪽 — master 브랜치의 main.html 파일 내용
- 오른쪽 — test 브랜치의 main.html 파일 내용
- 가운데에서 IntelliJ IDEA가 최종 버전의 코드를 입력하도록 제안해 (어떤 파일에서 변경 사항을 자동으로 삽입하려면 ‘>>’ 및 ‘<<’ 버튼을 클릭할 수 있어)
나는 master 버전을 선택하고 손으로 코드를 작성했어. 결과는 이렇게 나왔어:
11.6 변경 내역
또 다른 유용하고 흥미로운 사실. Show History 버튼을 클릭하여 모든 파일의 변경 내역을 볼 수 있어. 이걸 찾을 수 있는 두 장소가 있어. 찾아봐.
내가 main.html 파일에 대한 변경 내역을 보여줄게:
설명:
-
왼쪽에는 특정 파일의 변경 내역이 보여:
- 변화가 새로울수록 위에, 오래될수록 아래에 있어
- 브랜치 병합의 내역도 보여
- 오른쪽 — 특정 커밋에서 적용된 변경사항
GO TO FULL VERSION