본문 바로가기

Git

Git으로 협업하기

Git을 이용하지 않을 때 문제점


각자 작업하던 코드를 합쳐야 할 때 일일이 diff하고 복사, 붙여넣기 해야한다. 이때, 같은 코드를 다르게 수정했을 수도 있으며 자신과 관련 없는 코드도 살펴봐야 하는 등의 이유 때문에 코드 병합은 복잡하고 힘들어진다.

 

Git을 이용한 코드 병합


Git은 독립적으로 개발할 수 있는 환경을 제공해주고 각자 개발한 작업들을 대신 합쳐준다.

Branch


Git의 Branch는 버전의 분기로, 원래 코드와는 상관없이 독립적으로 개발을 진행하게 해준다.

Git의 기본 branch는 master, Github의 branch는 main

Checkout


특정 브랜치에서 작업할 수 있도록 작업 환경을 바꾸는 행위다. (HEAD를 변경하는 작업이다.)

한 브랜치에서 작업을 하다가 커밋하지 않고 checkout하고 싶을 때, working directory를 정리(stash, amend)하는 것이 좋다. (충돌이 발생할 경우, checkout을 할 수 없기 때문)

HEAD


현재 작업 중인 브랜치의 커밋을 가리키며, 일반적으로 현재 작업 중인 브랜치의 최신 커밋을 가리킨다.

 

명령어

브랜치를 생성 및 삭제하는 명령어다.
브랜치를 삭제할 땐 옵션 -d를 지정해준다.

브랜치를 생성할 때 브랜치 이름은 목적에 맞게 부여하는 것이 좋다.
예를 들면, 로그인 기능을 추가 혹은 이슈 해결을 위한 브랜치는 login이라고 할 수 있다.

스타일이 다 다르지만, 병합한 브랜치는 삭제해주는 것이 혼돈이 없다. (나중에 이 브랜치는 뭐지..?할 수 있다..)

 

git branch [-d] login
브랜치를 변경하는 명령어다.

 

git checkout[-b] menu
-v 브랜치마다 마지막 커밋 메시지를 같이 보여주는 옵션
--merged 브랜치와 merge된 브랜치를 보여주는 옵션
--no-merged merge하지 않은 브랜치를 보여주는 옵션

 

git branch [-v/--merged/--no-merged]

Merge


여러개의 branch을 합치는 것, 각자 작업한 코드를 합쳐 새로운 버전을 만드는 행위이다.

 

빨리감기 병합(fast-forward Merge)


두 개의 branch를 병합할 때, 병합될 branch에서만 작업했을 경우 사용하는 병합 방법이다.

하나의 branch에서 작업한 후 해당 branch에서 추가한 내용만 반영한다.

fast-forward Merge 전
fast-forward Merge 후

일반 병합(3-way Merge)


두 개의 branch가 동시에 각자 작업을 진행했을 때 하는 병합 방법이다.

3-way Merge 전
3-way Merge 후

명령어

git merge 브랜치명

충돌


병합하려는 두 branch가 같은 파일을 다른 내용으로 수정했을 때, Git은 둘 중 하나의 파일만 선택하거나 새로 작성해야 하는데, 이러한 상황을 충돌이라고 한다.

 

충돌 난 부분을 표준 형식에 따라 표시해준다.

/*
======= 위쪽의 내용은 HEAD 버전의 내용이고 아래쪽은 병합하려는 브랜치(iss53)의 내용이다.
*/
<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
 please contact us at support@github.com
</div>
>>>>>>> iss53:index.html

충돌 해결 방법


둘 중 하나의 브랜치 작업을 선택하거나 새로 작성해야 한다. 하지만 한 파일을 2개의 브랜치에서 변경하는 것은 바람직하지 않으며 가능하면 충돌이 일어나지 않도록 되도록이면 같은 파일을 수정하지 않도록 해야 한다.

하나의 파일에서 이 부분은 a branch의 코드를, 다른 부분은 b branch의 코드를 선택하고 싶을 때 이러한 상황에선 난감하다.

 

새로 작성할 땐 수정해준 후 <<<<<<<=======>>>>>>> 가 포함된 행을 삭제한다.

 

같은 파일을 수정해야 하는 상황이 있는데 이 경우엔 새로운 파일을 만들고 그 파일을 import하는 방식으로 사전에 방지할 수 있다. 

 

1. 하나의 branch에서 빈 파일을 만들어준다.

2. 다른 branch에서 만들어진 빈 파일에 작업을 수행한다.

3. 작업한 파일을 수정하고자 하는 파일에 import 해주면 된다.

 

그 외에 mergetool 등의 Merge 도구들이 있다.

 

merge를 한 후에는 어떻게 충돌을 해결했고, 좀 더 확인해야 하는 부분은 무엇이고 왜 그렇게 해결했는지에 대해 자세하게 기록하는 것이 좋다.

 

 

'Git' 카테고리의 다른 글

Git 기초  (0) 2023.07.06