업데이트된 원격 브랜치와 로컬 브랜치 merge하기 + git stash

·2023년 7월 30일
0

프로젝트 공부

목록 보기
24/33

How To Merge?

한창 로컬 브랜치에서 작업중일 때, 다른 팀원이 develop 브랜치로 push하여 업데이트 된 경우!
그대로 내 작업물도 push하면 conflict가 발생할 수 있다.

그렇다면 어떻게 두 브랜치를 합칠 수 있을까?

📌 git pull

원격 저장소에 올라와 있는 브랜치를 현재 내 로컬 브랜치와 합친다.

이때 pull이란 fetch + merge이며, 둘을 나눠서 쓰면
fetch는 둘의 차이를 보여주고, 이를 바탕으로 원하는 부분만 합치는 섬세한 작업이 가능하다.

1. $ git stash (현재 로컬의 변경 된 소스가 있으면 pull 되지 않으므로 임시 저장)

2. $ git checkout master (master branch  이동)

3. $ git pull origin develop(소스 내려받기)

4. $ git checkout [localbranch] (자신의 branch 이동)

5. $ git rebase main (master 소스를 자신의 branch와 병합)
또는 $ git merge main (이게 나을지도?)

6. $ git stash list (임시 저장소 목록)

7. $ git stash apply (임시 저장소에 있는 소스 현재 브랜치에 적용)

8. $ git branch -v (branch 버전 보기, 이때 마스터의 브랜치 버전과 내 브런치 버전이 동일 해야함)

명령어를 통해 현재 위치해있는 로컬 브랜치와 원격 저장소의 develop을 합쳐주는 것이다.
만약 develop이 아닌 다른 브랜치, 예를 들어 master과 합치고 싶다면 $ git pull origin master를 해주면 된다.

git add를 하지 않은 파일의 경우 git pull을 하면 덮어쓰기가 될 수 있다. 이런 경우 위의 stash를 저장, 적용해주어야 작업하던 파일을 그대로 쓸 수 있다.

git pull 도중 오류 발생?

error: Your local changes to the following files would be overwritten by merge:
        build.gradle

git pull을 하다보면 위와 같은 에러가 발생하면서 pull이되지 않을 수 있다. 이는 내가 수정한 파일을 다른 사람이 push한 경우 해당 파일이 충돌되기 때문에 merge되기 전 조치를 취하라는 뜻이다.

해결방법

git stash라는 명령어를 통해 현재 작업한 것들을 스택에 잠시 저장하는 방법이 있다.
이때 stash란 아래에 해당하는 파일들을 보관해두는 장소이다.

  • Modified이면서 Tracked 상태인 파일
    • Tracked 상태인 파일을 수정한 경우
    • Tracked: 과거에 이미 commit하여 스냅샷에 넣어진 관리 대상 상태의 파일
  • Staging Area에 있는 파일(Staged 상태의 파일)
    • git add 명령을 실행한 경우
    • Staged 상태로 만들려면 git add 명령을 실행해야 한다.
      *git add는 파일을 새로 추적할 때도 사용하고 수정한 파일을 Staged 상태로 만들 때도 사용한다.
//오류 해결 방법!
//-------------
$ git stash //변경사항 스택에 저장

$ git pull origin develop //원격 브랜치와 합치기

$ git stash apply //변경사항 적용

$ git stash pop //변경 사항을 적용하고 스택에서 제거

이때 git stash pop을 하더라도 stash list에서는 저장한 stash가 삭제되지 않기 때문에 git stash drop을 통해 제거해줘야 한다.

간단 git stash 명령어

명령어설명
git stash, git stash save현재 상태를 스택에 저장
git stash liststash 목록 확인
git stash apply가장 최신의 stash를 가져와 적용
git stash apply [stash 이름][stash 이름]에 해당하는 stash를 가져와 적용
git stash apply --index위 명령어와 달리Staged 상태였던 파일을 자동으로 Staged 상태로 만들어줌
git stash drop가장 최근의 stash 제거
git stash drop [stash 이름][stash 이름]에 해당하는 stash 제거
git stash show -p | git apply -R가장 최근의 stash를 사용하여 패치를 만들고 그것을 거꾸로 적용

참고
[Git (6)] git pull 에러 해결방법 (Your local changes to the following files would be overwritten by merge ) - git stash
[Git] git stash 명령어 사용하기
[Git] 자주 사용하는 Git 명령어 모음

profile
개발자가 되고싶은 낭랑 24세

0개의 댓글

관련 채용 정보