GUI 다운로드
Xcode 프로젝트에 Repo 생성 후 Github에 연결
- Xcode에서 샘플 프로젝트 생성 후
Integrate
→New Git Repository
→Create


- 좌측 상단에
Source Control navigator
클릭 →Remote
→New “{프로젝트 명}” Remote..
- 프로젝트에 생성된 Git Repo을 Remote 환경(Github)에 올리는 작업
- Git Repo는 프로젝트의 변경 사항을 기록(
Commit
)하고 프로젝트의 현재 상태를 관리하는 저장소 - 결국 관리를 위해서 기록이 필요하고 이를
Commit
이라는 명령어가 실행 Commit
은 Snapshot 방식으로 변경 내역만 저장하고(전체 파일 저장 X),Head
라는 포인터가 현재 프로젝트에서 보여지는 Commit을 알려준다.

Branch 생성 후 커밋 기록
Main
을 기준으로New Branch from “Main”
클릭

- feature/ {브랜치명} 입력
- 이때 브랜치명에는 관례적으로 소문자, - 만 사용한다.
- ‘feature/’ 는 feature라는 디렉토리를 생성해 브랜치 들을 묶어서 관리하기 위함이다.
- 이후 자동으로
switch
(브랜치 이동)되어 생성한 브랜치로 이동했다. main
: 기본 브랜치,feature/test-set-project
: 생성한 브랜치- //Test Code 입력 후 커밋(
test branch
의 첫 변경 이력) - 네비게이터의 우측
U
는 로컬의 변경 사항이 아직 Remote에 반영되지 않았다는 의미 - 즉
Push
를 통해 올려줘야 한다. - 커밋을 2개 정도 더 찍어준다






Main branch에 커밋 추가
rebase
의 강력함을 이해하기 위해서는 브랜치를 약간 엉망?으로 만들 필요가 있다.
- 사실, 브랜치에서 작업 중
Main
에 다른 동료가Push
→Merge
한 케이스는 협업에서 매우 흔하다.
- 현재
Push
를 안 해서 원격 저장소에 반영이 안 된 것을 알 수 있다. →Push
진행

Push
후 고양이가 올라간 것을 확인 →Remote
가local
의 변경 사항을 반영했다는 의미


- 본격 브랜치 망치기 시작,
Main
으로switch
후 커밋 추가(2개 정도 진행)



- Fork(GUI)에서 그래프 확인
- Main 브랜치에서 커밋을 진행하기 전, 하나의 그래프로 기록되었던 그래프가 나뉜 것을 확인 할 수 있다.
- 이는 Main 브랜치의 내용에 변경 사항이 생기면서
cc1b7fb
와96dcea0
의 Snapshot에 차이가 발생했고 이를Conflict
라고 한다. Conflict
는 겁먹을 필요는 없고,merge
또는rabase
를 통해서Main
으로Conflict
를 해결하고 병합해주면 된다.merge
시 커밋 그래프 확인- 우선 바로
merge
시켜 보겠다. - 지금은 브랜치의 숫자가 적어서 지저분해 보이지 않으나…
- 나중에는 이렇게 된다. ?@?
- 따라서, 커밋 이력을 말끔하게 정리하기 위해
rebase
를 이용한다. rebase
란 ‘branch의 base를 main으로 다시 다시 조정한다는 의미’이다.- 이를 통해 선형적인
commit history
를 관리할 수 있다. rebase
실행Test branch
의 커밋 이력이Main
의 커밋 히스토리(ef30c31
)로 base를 잡은 것을 알 수 있다.- 이후 Test 브랜치를 삭제하면 깔끔하게 Main 브랜치의 커밋 히스토리를 관리할 수 있다.
- Xcode는 간단하게
Commit
찍는 용도로 사용한다. - 히스토리 확인,
Checkout, Pull, Push
등의 기능은 Fork(GUI)를 활용한다. - Xcode의 경우 그래프를 확인할 수 없으며, 변경 사항에 대한 히스토리 업데이트 또한 즉각적이지 않다.(예를 들어, 방금 찍은 Commit을 확인하기 위해 히스토리를 보아도 방금 찍은 커밋은 없고 껐켰 한번 해야지 반영된다.)
- A를 B에
Rebase
한다는 의미는 B의 마지막 커밋을 Base로 한 후 브랜치를 병합하는 것이다. - 커밋 히스토리를 선형적으로 깔끔하게 관리하는데 그 목적이 있다.




요약
Share article