Branch

merge

현재 작업하고 있는 branch 내용이 다른 branch에서도 필요할때 사용된다.

  1. base : 병합하기 이전의 서로 다른 branch의 공통의 부모

  2. merge : 서로 다른 branch를 병합한 새로운 버전


다른 파일을 병합하는 경우


같은 파일에서 다른 부분을 병합하는 경우

원하는 내용을 원하는 branch에 병합하기 위해서 아래와 같이 진행해야 한다.

  1. git checkout을 사용해 HEAD를 원하는 branch로 이동시켜야한다.

  2. git merge (병합할 내용의 branch명)

같은 파일에서 같은 부분을 병합하는 경우-> 충돌

위와 같은 방법으로 merge를 시도하면 conflict(충돌)가 발생한다 그래서 우리는 충돌이 일어난 부분만 수동으로 수정해주면 merge가 되는 것는 것을 확인할 수 있다.

2way merge

서로 다른 2개의 branch를 병합할때 같은 부분의 내용이 서로 다르면 충돌이 일어나게 된다.

here there 설명
a a 2개의 내용이 같이 a로 병합한다
b s 충돌이 일어나 수동으로 병합해주어야 한다

3way merge

base, here, there 3개의 branch가 있다고 가정하자

here base there 결과 설명
a a a a 3개의 내용이 같이 a로 병합한다
b s s s base -> there은 변경되지 않았고,base -> here 변경된 것을 확인할 수 있다.그래서 here 브랜치의 수정된 내용인 b를 병합한다.
y y t t 위와 같이 t의 내용으로 병합된다.
y s t ? 3개의 내용이 다르기 때문에 충돌이 일어나 수동으로 수정해주어야 한다.

Backup

Backup 명령어

  1. git push : 지역 저장소-> 원격 저장소로 파일을 업로드하는 git 명령어

  2. git pull : 원격 저장소-> 지역 저장소로 파일을 다운로드 하는 git 명령어,

  3. git clone : 새로운 지역 저장소를 만들었을때 원격 저장소에서 파일을 복제

pull 과 clone의 차이점

3개의 git 명령어를 알아봤는데 pullclone이 복제하는 부분이 같다는 점에서 어떤 차이점이 있는지 의문이 들어 찾아봤다.

  • clone은 해당 repository를 통째로 다운 받는 개념으로 내 컴퓨터에 해당 프로젝트의 폴더를 새롭게 생성한다.

  • 반대로 pull은 내가 참여하고 있는 프로젝트에서 변경 사항이 생긴 경우 내가 로컬로 작업하고 있는 프로젝트와의 병합을 위해서 수행한다는 점에서 차이가 있다.

git fetch와 git pull의 차이점

  • git fetch: 원격저장소에서 데이터를 임시 브랜치로 다 내려받습니다. 내려받은데이터를 로컬에 실제로 가져오지는 않습니다. 그래서 워킹디렉터리도 변화가 없어 merge 명령어를 이용해서 수동병합해야한다.

  • git pull : 원격 저장소에서 변경된 정보를 확인할 뿐만 아니라 최신 데이터를 복사하여 로컬에 자동으로 병합한다. 하지만 충돌이 생길경우에 fetch를 이용해 수동병합 해주어야 한다.