이 글의 작업 환경은 아래와 같이 되어 있다고 가정한다.
Upstream : 원본 저장소
Origin : 원본 저장소를 내 레포에 Fetch 한 저장소
로컬 저장소
Remote(Upstream) 저장소에서 로컬로 가져와서 C1, C2, C3 를 작업했다.
이제 Origin 에 push 후, Squash merge 를 통해 Remote 저장소에 반영했다.
스쿼시 머지를 한 후, 이후 작업을 진행한다.
$ git remote add upstream [원본 저장소 URL] // 로컬환경에 upstream 저장소 정보 추가
$ git fetch upstream [브랜치이름] // upstream 저장소의 브랜치 변경정보 가져옴
/* 작업 */
$ git add .
$ git commit -m "C4"
이제 Remote 에 반영시키려고 보니, 로컬의 C1, C2, C3 는 Remote 에 Squash C1 으로 올라가 있는 상태다.
하지만 커밋이 다르기에 Conflict 가 난다.
Conflict 를 해결하는 커밋을 날리고, 작업을 하면 되겠지만
내 로컬의 브랜치를 아래처럼 만들면 애초에 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 |