Git 관련된 모든 포스팅을 하는 동안 main 브랜치만 다루어 왔다. Git은 결국 협업을 하거나 혼자 개발한다고 해도 기능별로 구분이 필요하기 때문에 브랜치 전략을 세우는 것은 중요 하다고 생각 한다. 운영/개발/기능용 코드 역할에 따라 브랜치를 나누기도 하고, 협업중 충돌이 예상되면 브랜치를 나누기도 하겠지만 나는 혼자 개발을 진행한다는 관점으로 '기능별'로 분리 하려고 한다.
Xcode에서 현재 상태를 확인해 보면 'main' 브랜치만 존재 한다. main 브랜치의 우측 점3개 버튼을 눌러서 New Branch form "main"으로 새로운 브런치를 만들 수도 있고,
Repositories 탭에서 main 브랜치를 우클릭 해서 새로운 브랜치를 만들 수도 있다.
지금 부터는 로그인 및 로그아웃 등 사용자 인증 기능을 담당하는 'auth' 브랜치를 만들고 병합하는 과정을 작성 한다. 먼저 auth 브랜치를 생성 한다.
브랜치 이름 옆에 (current)가 표시 되면 현재 이 브랜치를 사용하고 있다는 의미이다. 즉, auth 브랜치를 생성하자 마자 main 브랜치에서 auth 브랜치로 전환되며 auth 브랜치를 사용하게 되었다.
만약 새로운 브랜치를 생성 했음에도 Xcode가 새로운 브랜치로 이동시켜주지 않으면, Switch 버튼을 눌러 전환(Checkout) 시켜주면 된다.
아무튼 지금은 auth 브랜치를 신규 생성 했고, 현재 auth 브랜치를 사용하고 있는 상태이다. GitKraken으로 현재 상태를 확인해 보면 auth 브랜치와 main 브랜치는 모두 보이는데, auth 브랜치에는 GitHub 표시가 없다.
Xcode에서도 원격저장소를 지칭하는 origin을 확인해 보면 main 브랜치만 존재하는 상태이다. 즉, 새로 생성한 auth 브런치는 아직까지 '로컬전용' 브랜치 라는 것이다.
때문에 원격저장소(Github)가 새로 생성한 브랜치를 인지 할 수 있도록 auth 브랜치를 사용하고 있는 상태에서 Push를 한번 해준다.
Push를 누르기전, 확인 할 수 있듯이 origin/auth (Create) 라고 표기 되어 있다. 이제 로컬저장소와 원격저장소 모두에 auth 라는 브랜치가 생겼음을 알 수 있다.
이제 auth 브랜치에 있는 상태에서 작업을 시작 했다고 가정한다. 로그인 기능을 개발 완료 했다고 가정 했다. (실제로는 주석만 달았다)
이제 이것을 스테이징 하고, 적당한 메시지를 작성해서 커밋 해본다.
커밋을 하나 더 진행 한다. 로그인이 완료 되면 콘텐츠뷰로 자동 화면 전환 되었다는 것을 가정 한다.
이제 auth 브랜치에 2개의 커밋이 있음을 확인 할 수 있고, 원격버전의 origin/auth 보다 2커밋 앞선(Ahead)것을 확인 할 수 있다.
GitKraken으로 확인해 보면, 아래와 같다.
원격저장소의 main브랜치와 auth브랜치는 로컬저장소의 auth 보다 2커밋이 밑에 있다. 아직 로컬저장소의 auth 브랜치에서 GitHub로 Push 하지 않았기 때문이다. 이제 Push를 진행해 본다.
main 브랜치와는 일치하지 않지만, 로컬저장소의 auth브랜치와 원격저장소의 origin/auth 브랜치가 일치함은 확인 할 수 있다.
이것을 GitHub에서 확인해 보면, main브랜치보다 auth브랜치가 2커밋 앞서있다고 명확히 표시해 준다.
이제 Xcode로 돌아와서 main브랜치로 전환(Switch = Checkout) 해본다.
다시 auth브랜치로 전환(Switch = Checkout) 해본다.
현재처럼 커밋이 완료된 상태에서는 main 브랜치와 auth 브랜치간의 전환이 자유롭다. (아직 auth 브랜치가 2커밋 앞서고 있다) 이제 auth 브랜치를 사용하는 상태에서 로그아웃 기능을 개발중 이라고 가정한다.
2번의 커밋을 완료해 둔 상태이고, 로그아웃 기능은 커밋 없이 작업중인 상태이다. auth브랜치에서는 작업중이기 때문에 현재 상태에서는 앱을 빌드하면 앱이 크래시 나고, 다른 사람에게 보내주려면 정상 작동하는 main 브랜치로 돌린 후 빌드해야 하는 것을 가정한다.
갑자기 다른 사람에게 앱을 보여주게 되었다. main 브랜치로 전환(Switch)을 시도 하면 Stash 화면을 만나게 된다.
Stash는 "작업 도중의 변경 사항을 임시로 저장해두는 기능"이다. 여기서 중요한것은 미처리된 변경사항이 있는 경우 (커밋이 안된 경우) 다른 브랜치로 전환할 수 없다는것을 인지해야 한다.
기능을 어느정도 구현했지만 아직 완성되지 않아서 커밋하기 애매할 때가 있다. 그런데 이렇게 갑자기 main 브랜치로 전환 해야 한다면 작업 중인 내용을 임시저장소에 넣고, main 브랜치에서 할 일을 마친 후 본래 브랜치로 돌아와서 임시 저장했던 stash 항목을 불러와(apply) 작업을 이어 나가면 된다.
위에서와 같이 Stash Changes 에 메세지를 입력하고 Stash and Switch 버튼을 누르면 main 브랜치로 전환 됨을 확인 할 수 있다.
(current) 표시로 main 브랜치를 사용중 이라는 것이 확실하고, Stashed Changes 항목에 임시 저장한 변경사항도 존재 하는 것을 확인 할 수 있다. ContentView.swift 파일을 확인해 봐도 auth브랜치에서 작업한 내용들이 반영되어 있지 않고, main에서 커밋했던 마지막 소스코드로 복원 되었다.
이제 main 브랜치에서 할 일이 끝나고 다시 auth 브랜치로 전환해서 작업을 이어나간다고 가정해 보자.
auth 브랜치로 전환 되었지만, 최종 작업하던 "로그아웃 기능 개발중" 내역이 없다.
이때, Stashed Changes 항목에서 Apply Stashed Changes 를 눌러 임시 저장한 내용을 불러온다.
보통 임시저장한 내용을 불러오는 용도기 때문에 Keep stash after applying 항목은 체크해제 하여 불러온 후 삭제 되도록 한다.
불러오기가 완료 되면 아래 처럼 임시저장되었던 코드들이 돌아오며, 본래 작업중이던 화면으로 원복된 것을 확인 할 수 있다.
auth브랜치에 존재하는 상태에서, 로그아웃 기능을 개발 완료 하고 커밋과 푸시를 완료 한다.
이제 auth브랜치는 main 브랜치보다 3커밋 앞서(Ahead)있다. auth브랜치에서 작업 목적 이었던 로그인, 로그아웃을 모두 개발 완료 하였고 main 브랜치와 병합(Merge)만 남았다.
이것은 main 브랜치가 다른 브랜치를 가져와서 병합하는 개념이므로 브랜치를 우선 main 브랜치로 전환 시켜야 한다. (current) 표시를 반드시 확인 하자.
main 브랜치로 병합 하려는 auth 브랜치를 우클릭 하여, Merge "auth" into "main"...를 선택 한다.
"auth"의 변경 사항은 현재 브랜치("main")에 병합됩니다.
안내 문구를 확인 하고 Merge 버튼을 누르면, 로컬저장소에서는 병합이 완료 된다. 로컬에서 병합이 깔끔하게 마무리 되었지만, 아직 원격저장소의 origin/main 브랜치 보다 로컬저장소의 main 브랜치가 앞서고 있는 것을 확인 할 수 있다.
이제 원격저장소(GitHub)로 Push를 하므로서 원격저장소까지 병합을 완료 시킨다.
이제 병합이 모두 완료되어 로컬저장소와 원격저장소가 동일함을 확인 할 수 있다.
이제 사용용도를 다한 로컬저장소의 auth 브랜치는 삭제 하면 된다.
GitHub를 접속해 원격저장소 입장에서도 auth 브랜치를 삭제 진행 한다.
'Programming > GitHub' 카테고리의 다른 글
README와 .gitignore파일 생성 및 설정 (0) | 2025.06.29 |
---|---|
Xcode에서 Push와Pull (0) | 2025.06.28 |
Xcode에서 소스코드 커밋하기 (0) | 2025.06.28 |
Xcode에서 GitHub원격저장소 만들기 (0) | 2025.06.27 |
GitHub계정 Xcode설정 방법 (0) | 2025.06.27 |