Git 사용법

김승연·2023년 4월 30일

Git

목록 보기
1/1

Commit 메시지 작성 방법

1번째 줄 : 커밋 내의 변경 내용을 요약
2번째 줄 : 빈 칸
3번째 줄 : 변경한 이유

작업트리와 인덱스

Git의 '커밋' 작업은 '작업 트리'에 있는 변경 내용을 저장소에 바로 기록하는 것이 아니라 '인덱스'에 파일 상태를 기록(stage - 스테이징) 해야 한다.

원격 저장소 복제 (Clone)

  • 누군가의 변경 이력이 적용된 원격 저장소가 있으면, 그걸 통째로 복제해와 내 PC에서 작업할 수 있다. 이때 사용하는 것이 Clone !
  • 변경 이력도 함께 로컬 저장소에 복제되어 오기 때문에, 원격 저장소와 똑같이 이력을 참조, 커밋 진행이 가능하다.

원격 저장소에서 Pull 해오기

  • 원격 저장소를 공유해 여러 사람이 함께 작업하면, 모두가 같은 원격 저장소에 push를 하게 됨.
  • 그렇다면, 다른 사람이 원격 저장소에 push한 내용을 내 로컬 저장소에도 pull 할 필요가 있다. (원격 저장소 변경 내역 로컬 저장소에 업데이트)

변경 이력 병합(Merge)

내가 pull을 한 후 다른 사람이 push를 해 원격 저장소를 업데이트 한 경우 내 push 요청이 거부된다.

이 경우 병합(merge) 작업을 통해 다른 사람의 업데이트 이력을 내 저장소에도 갱신해야 한다.

1. 수동으로 해결하는 방법

  • 원격 저장소와 로컬 저장소 양쪽에서 파일의 동일한 부분을 변경한 경우
    두 변경 내용 중 어느 쪽을 저장할 것인지 판단 할 수 없기 때문에 충돌 발생

Git은 충돌이 발생한 파일 내용을 위 그림처럼 표시해준다. (이 부분을 직접 수정해 주어야 함)
즉, 파일을 일일이 비교하며 바뀐 점을 찾아서 적용한 후 병합

당연히 "<<<<<<<< HEAD , >>>>>>>>>footer" 같은 충돌기호는 다 지워야 한다.

2. 깃으로 자동 병합

  • 파일의 다른 위치를 수정했다면 깃에서 서로 다른 위치의 소스를 자동으로 병합하기 때문에 문제가 없다.

  • 하지만 실제 개발 환경에서는 여러 사람이 같은 위치의 코드를 수정하기 때문에 자동병합으론 해결 못하는 충돌이 자주 일어남.

이 경우,

git checkout master : 기준이 되는 브랜치로 먼저 이동
git merge feature : 병합당하는_브랜치

명령어를 입력하면 브랜치의 코드가 아래처럼 수정된다.

동일한 곳을 수정했을 경우

아래처럼 수정됨

HEAD가 현재 브랜치이고, 둘 다 수락하거나 둘 중 하나를 수학하면 자동으로 충돌이 해결된다.
선택하고 add, commit 하면 병합이 완료된다.

충돌 예방 방법

  • 내부적으로 팀원 간 규칙을 정하고 상의하면서 개발을 진행하면 항후 발생할 충돌을 줄인다.
  • 자주 커밋하고 자주 병합할 수록 충돌이 발생할 기회는 적다.
  • 자신의 브랜치 상태가 최신일수록 병합할 때 발생하는 충돌을 최소화 할수 있다.
  • 기준이 되는 브랜치(예를 들어 master)를 자주 모니터링하고, 변화된 부분을 즉시 자신의 브랜치에 반영하면서 작업하면 충돌을 줄일 수 있다.

브랜치 병합 여부 확인

병합한 브랜치는 (*)로 표시된다!
git branch --no-merged :병합하지 않은 브랜치 조회

참고

  1. https://backlog.com/git-tutorial/kr/intro/intro1_1.html
  2. https://konkukcodekat.tistory.com/entry/%EA%B9%83git-%EB%B3%91%ED%95%A9-merge-Fast-Forward-3-way

0개의 댓글