본문 바로가기

Git

squash 머지 한 브랜치에서 계속 작업할 경우

이 글의 작업 환경은 아래와 같이 되어 있다고 가정한다.

 

Upstream : 원본 저장소

Origin : 원본 저장소를 내 레포에 Fetch 한 저장소

로컬 저장소

 

 

 

Remote(Upstream) 저장소에서 로컬로 가져와서 C1, C2, C3 를 작업했다.

리모트 저장소를 로컬 저장소로 가져와서 작업한 로컬 저장소 상태

 

 

이제 Origin 에 push 후, Squash merge 를 통해 Remote 저장소에 반영했다.

C1, C2, C3 작업한 내용이 머지된 Remote 저장소 상태

 

 

 

스쿼시 머지를 한 후, 이후 작업을 진행한다.

$ git remote add upstream [원본 저장소 URL] // 로컬환경에 upstream 저장소 정보 추가
$ git fetch upstream [브랜치이름] // upstream 저장소의 브랜치 변경정보 가져옴
/* 작업 */
$ git add .
$ git commit -m "C4"

C1~C3 까지 내용이 리모트 저장소에 반영된 후, C4 작업을 한 로컬 저장소 상태

 

 

이제 Remote 에 반영시키려고 보니, 로컬의 C1, C2, C3 는 Remote 에 Squash C1 으로 올라가 있는 상태다.

하지만 커밋이 다르기에 Conflict 가 난다.

 

Conflict 를 해결하는 커밋을 날리고, 작업을 하면 되겠지만

내 로컬의 브랜치를 아래처럼 만들면 애초에 Conflict 가 나지 않을 것이다.

이렇게 로컬을 만들어놓고 merge 시도시 conflict 는 나지 않는다.

 

 

 

 

그렇다면, C4 작업을 하기 전에

 

내 로컬의 이런 모양의 로그를

 

아래처럼 만들어 놓고, C4 작업을 해야할텐데,

 

그 명령어는 

$ git reset --hard upstream/[branch]

이다.

 

 

 

또는, 나는 로컬에서 C1 -> C2 -> C3 로그도 필요하다 싶다면,

$ git checkout -b [new branch] upstream/[branch]

를 하게되면

 

 

이와 같은 모양으로 새로운 브랜치를 따서 기존에 내가 작업했던 C1 -> C2 -> C3 를 보고

작업은 new branch 에서 해서 merge 하면 될 것이다.

 

 

 

 

 

upstream/[branch]  vs  [branch]

upstream/[branch] : 리모트 저장소의 브랜치
[branch] : 로컬의 브랜치

 

 

 

 

 

 

 

 

 

https://www.youtube.com/watch?v=MIGliPrUMGE 

 

'Git' 카테고리의 다른 글

git rebase -i  (0) 2021.10.06
rebase, pull --rebase  (0) 2021.10.06
upstream vs origin  (0) 2021.10.06
Rebase  (0) 2021.10.06
.gitignore  (0) 2020.12.11