Git에 대해서 (2)
Branch
merge
현재 작업하고 있는 branch 내용이 다른 branch에서도 필요할때 사용된다.
-
base: 병합하기 이전의 서로 다른 branch의 공통의 부모 -
merge: 서로 다른 branch를 병합한 새로운 버전
다른 파일을 병합하는 경우
같은 파일에서 다른 부분을 병합하는 경우
원하는 내용을 원하는 branch에 병합하기 위해서 아래와 같이 진행해야 한다.
-
git checkout을 사용해 HEAD를 원하는 branch로 이동시켜야한다. -
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 명령어
-
git push: 지역 저장소-> 원격 저장소로 파일을 업로드하는 git 명령어 -
git pull: 원격 저장소-> 지역 저장소로 파일을 다운로드 하는 git 명령어, -
git clone: 새로운 지역 저장소를 만들었을때 원격 저장소에서 파일을 복제
pull 과 clone의 차이점
3개의 git 명령어를 알아봤는데 pull과 clone이 복제하는 부분이 같다는 점에서 어떤 차이점이 있는지 의문이 들어 찾아봤다.
-
clone은 해당 repository를 통째로 다운 받는 개념으로 내 컴퓨터에 해당 프로젝트의 폴더를 새롭게 생성한다.
-
반대로 pull은 내가 참여하고 있는 프로젝트에서 변경 사항이 생긴 경우 내가 로컬로 작업하고 있는 프로젝트와의 병합을 위해서 수행한다는 점에서 차이가 있다.
git fetch와 git pull의 차이점
-
git fetch: 원격저장소에서 데이터를 임시 브랜치로 다 내려받습니다. 내려받은데이터를 로컬에 실제로 가져오지는 않습니다. 그래서 워킹디렉터리도 변화가 없어merge명령어를 이용해서 수동병합해야한다. -
git pull: 원격 저장소에서 변경된 정보를 확인할 뿐만 아니라 최신 데이터를 복사하여 로컬에 자동으로 병합한다. 하지만 충돌이 생길경우에fetch를 이용해 수동병합 해주어야 한다.