Written by
최태열
on
on
Git 입문 2
브랜치 생성 및 전환과 병합(Merge)
생성과 전환
브랜치
독립적으로 작업을 진행하기 위해 갈라져 나온 버전
독립적이기 때문에 여러 작업을 동시에 진행 가능
Master branch : 저장소를 처음으로 만들었을 시 기본으로 생성
브랜치 생성/수정/삭제
$ git branch // 브랜치 확인
$ git branch 브랜치명 // 브랜치 생성
$ git branch -m 브랜치명 바꿀 이름 // 브랜치 이름 수정
$ git branch -d 브랜치명 // 브랜치 삭제
브랜치 전환
$ git checkout 브랜치명 // 브랜치 전환
$ git checkout -b 브랜치명 // 생성과 동시에 전환
브랜치 전환 시 오류 발생할 경우
현재 작업 상황 임시 저장
$ git statsh // 현재 작업 중 상황을 임시 저장하고 작업 트리를 깨끗하게 만들어줌
$ git stash list // 임시 저장한 리스트 확인
$ git stash apply 불러오려는 인덱스 // 임시 저장한 리스트 불러오기
병합 (Merge)
자동 병합
-
Fast-forward
이력을 공유하며 분기하지 않는 브랜치를 합칠 때 추가적 commit 없이 합치는 방법
-
Recursive
특정 지점에서 분기하는 브랜치를 합칠 때 추가적 commit이 자동으로 생성되며 합치는 방법
-
병합 코드
HEAD 이동
$ git checkout 브랜치명
브랜치를 합치려면 다른 내용을 추가하여 합치려는 브랜치로 이동해야 한다.
merge
$ git merge 합쳐서 추가하려는 브랜치명
같은 커밋 이력을 공유하면 바로 추가하면서 git에서 자동으로 병합
수동 병합
두 브랜치 간의 수정 사항이 겹친다면 자동 병합이 불가능하여 수동 병합을 진행해야한다.
수정사항이 겹치는 파일을 확인하면 겹치는 부분이 꺽쇠로 구분되어 겹치는 위치를 알 수 있다.
그 부분을 수동으로 합치거나 수정해서 병합을 시도하면 자동 병합이 된다.
- 정리하며 병합하기
rebase
별도 브랜치 기록 남기는 대신에 중간에 커밋을 끼워 넣음으로서 간단하게 바꿔준다.
```jsx
$git rebase 브랜치명 //현재 HEAD와 대상 브랜치간의 공통 커밋 이후에 해당 커밋을 배치
```
충돌이 있는 파일은 꺽쇠를 기준으로 충돌 된 부분을 해결해주고 스테이징 해준다.
```jsx
$ git rabase — continue // 를 통해 마무리하면 rebase 병합 완료
```
-
커밋 이력 수정 (Edit_Commit)
- 직접 수정
$ git commit --amend // 직전 커밋 메시지를 수정 // 입력시 바로 git commit 처럼 vi 편집기 모드로 이동한다.
이후 “i”를 누를 시 삽입 모드가 진행된다. (메시지 수정 후 Esc)
:wq 를 입력해 저장 및 종료
- 되돌리기
$ git reset // 커밋 되돌리기
- 지정한 커밋으로 돌아가기
soft
$ git checkout -b reset-soft // reset-soft 브랜치로 체크아웃 $ git reset --soft 커밋주소 // 해당 커밋 주소로 이동 // 커밋은 취소되어 스테이지로 이동 // 작업트리는 여전히 존재
mixed
$ git checkout -b reset-mixed // reset-soft 브랜치로 체크아웃 $ git reset --mixed 커밋주소 // 해당 커밋 주소로 이동 // 스테이지 초기화됨 // 작업트리는 여전히 존재 $ git stash // 임시 저장 -> 이후 checkout
hard
$ git checkout -b reset-soft // reset-soft 브랜치로 체크아웃 $ git reset --soft 커밋주소 // 해당 커밋 주소로 이동 // 스테이지 초기화 // 작업트리의 파일도 이전으로 돌아감
- git revert
$ git revert 커밋 주소 // 해당 커밋을 제거하는 커밋을 추가 // ESC + :wq 로 저장 및 종료
Discussion and feedback