Git

Git

Git rebase

브랜치를 합치는 방법은 두 가지가 있다. 병합(merge)과 리베이스(rebase)다. 이번에는 커밋 순서를 재배열하는 리베이스에 대해 알아보겠다. Base 브랜치는 커밋 하나를 기준으로 새로운 작업을 진행할 수 있는 분리된 작업 경로를 말한다. 새로운 브랜치가 파생되는 커밋을 베이스라고 한다. 병합에서는 이를 공통 조상 커밋이라고 한다. 아래 그림에서는 커밋 2가 베이스이자, 공통 조상 커밋이다. Rebase 리베이스는 베이스 앞에 '다시'를 의미하는 re가 붙은 단어다. 파생된 브랜치의 기준이 되는 베이스 커밋을 변경하는 것이다. 그럼 브랜치의 베이스는 왜 변경하는 것일까? 커밋의 진행 모습을 단순화하기 위해서다. 브랜치가 많아지면 커밋을 관리하고 파악하기 어렵다. 꼬여 있는 기찻길처럼 단계별로 커밋..

Git

Git 병합 (Fast-Forward 병합, 3-way 병합)

병합 프로젝트에서 main 브랜치가 존재한다. 그럼 다른 브랜치에서 작업을 하고 이를 main 브랜치에 반영해야 한다. 분리된 브랜치를 하나의 브랜치로 합치는 작업을 병합이라고 한다. 각각의 브랜치에서 수정된 내용을 하나의 브랜치로 병합한다. 과거 수동(노가다)으로 코드를 하나하나 바꾸는 것은 정말 어렵고 귀찮은 일이었다. 깃을 사용해 자동 병합이 가능해지며 개발자의 삶이 윤택해졌다. 깃의 자동 병합은 원본을 기준으로 두 파일의 변경 이력을 비교하고, 변경된 파일 내용이 발견되면 자동으로 수정된 코드 내용을 병합한다. 그러나 자동으로 병합이 불가능한 것도 존재하는데, 이를 충돌이라고 한다. 병합 방식 병합 방식으로는 크게 2가지가 있다. Fast-Forward 병합 3-way 병합 실습 환경을 구축해보겠..

Git

Git Stash

Git Stash 개념 어떤 작업 내용을 개발자가 커밋했다. 이후 다른 업무로 인해 코드를 작성하다가 다른 브랜치로 이동하고 싶어졌다. 바로 git checkout과 switch를 쓰면 다른 브랜치로 이동할 수 있을까? 아쉽게도 그렇지 않다. 커밋하지 않은 코드가 남아있으므로 다른 브랜치로 이동이 불가능하다. 그럼 어떻게 코드를 작성하다가 다른 브랜치로 편하게 넘어갈 수 있을까? 이런 상황에서 스태시(stash)기능을 사용한다. stash를 번역기에 돌려보니 은닉처라고 나온다. 깃은 커밋되지 않은 변경 내용이 남아 있을 때, 현재 작업을 임시로 저장할 수 있는 스태시 기능을 제공한다. 스태시는 현재 워킹 디렉터리 내역을 별도의 스택 영역에 저장해 브랜치가 이동할 때 작업 중인 내용으로 워킹 디렉터리가 충..

Git

Git Error: fatal: 관계 없는 커밋 내역의 병합을 거부합니다.

fatal: 관계 없는 커밋 내역의 병합을 거부합니다. 위와 같은 오류가 발생했다. 이에 대한 해결법을 기록하고자 한다. 우선 공통된 커밋이 없기 때문에 이런 문제가 발생한다고 한다. 그래서 일단 원격 저장소 (remote)의 커밋들을 가져와야 한다. git fetch --all git reset --hard origin/master git push origin master git fetch -all : 원격 저장소의 모든 커밋을 가져온다. git reset --hard origin/master : git reset --hard를 사용하면 현재 작업 위치인 HEAD의 포인터를 특정 위치로 변경해버릴 수 있다고 한다. 이 명령어를 통해 origin/master로 HEAD의 포인터를 이동시킨 것이다. 그러면..

Debin
'Git' 카테고리의 글 목록