귀여운 눈높이에서 작성된, 🐰

하루 한 걸음씩, 성장 하는 중 입니다 🫶🏻

Studying/Git, GitHub

git 공부하기 - merge 후 pull 해온 뒤 /임시 저장 하는 stash 명령어

creamymood 2025. 6. 24. 14:44

알쏭 달쏭 깃..

아니 그냥 모르겠는 깃.

진짜 .. 실수할까봐 무서워..

 

오늘 팀에서 pull request를 main으로 해버린 상황 발생 ✨💡⭐️

 팀장님과 엑설런트 팀원님 조교님께서 해결 해주셨지만 ..

 

나도 주의 해야겠다고 ..

음 그냥 pr 하기 전에 조교님부터 찾아가서 일단 같이 해봐야겠다


develop 브랜치가 팀원분들의 코드로 합쳐져서,

그걸 나는 다시 pull 해와야 했고

git pull origin develop

당겨오니까, 디벨롭 브랜치에는 반영이 됐는데

 

특이한 경험을 했다.

내가 Register 파일을 만들어두고 커밋은 따로 하지 않았는데
브랜치 파일에서도 보였음. 이게 찾아보니까 커밋이나 이런거 하지 않아도 우선 내가 작업중인거니까 보이긴 하는거라고 했음 ↓

더보기
  • 근데 같은 폴더 안에 있어서 브랜치 이동 전에도 Register 파일이 보임
    → 맞아요! 워킹 디렉토리(작업 디렉토리) 에 있는 파일은 커밋하지 않아도 브랜치 상관없이 보여요.
    그래서 다른 브랜치로 이동해도 지워지지 않는 한 그 상태 그대로 존재합니다.

 

그 뒤

git checkout feature/join

이렇게 이동 했더니..

 

develop에 받아온 내용은 반영이 안되어 있다

 

당연한 내용인건데,

 

그 때의 그냥 나는 

풀 해오면 하위 브랜치에도 쫘르륵~ 반영이 되는 줄 알았는데..

 

그게 아니고, 내가 작업중이던 브랜치에서도 최신화를 해줬어야 하는거임 ↓

더보기
핵심 개념 정리
  1. develop 브랜치에서 pull 하면,
    • develop 브랜치에만 최신 코드가 반영됨.
    • 다른 브랜치(feature/join 등)는 영향을 받지 않음.
  2. feature/join 브랜치도 최신화하려면?
    • develop에서 최신을 받은 다음에,
    • feature/join 브랜치에서 아래 명령어로 병합(merge)하거나,
    • git checkout feature/join git merge develop
    • 또는, rebase도 가능:
    • git checkout feature/join git rebase develop

 처음에 헷갈린 부분 요약

"풀 해오면 하위 브랜치에도 쫘르륵~ 반영되는 줄 알았는데..."

이건 많은 분들이 처음에 헷갈려요!
브랜치는 서로 독립적이기 때문에, 한 브랜치에서 pull을 해와도 다른 브랜치에는 영향이 없습니다.
직접 merge or rebase를 해줘야 최신 develop 내용을 반영할 수 있어요.

 


내가 만약, feature 브랜치에서 작업중인던게 있다면?

stash로 임시저장 해주는 방법이 있다!

 

아래 순서 대로 해주면 된다.

전체 흐름 정리 (예: feature/login 브랜치 기준)

1. 현재 작업 중인 내용을 임시 저장 (stash)

git stash
  • 이건 작업 중이던 내용을 임시 저장하는 거야.
  • 커밋하지 않은 변경 사항들(파일 수정 등)을 숨겨놓는 느낌.
  • 저장 후에는 워킹 디렉토리가 깔끔해짐.

2. develop 브랜치로 이동

git checkout develop

3. 최신 develop 내용을 원격 저장소에서 pull

git pull origin develop
  • 여기서 develop 브랜치가 최신화돼.

4. 다시 내 feature 브랜치로 이동

git checkout feature/login

5. develop 내용을 내 브랜치에 병합

git merge develop
  • 이때 충돌이 날 수도 있어.
  • 충돌이 나면 수동으로 수정 → git add . → git commit 으로 마무리.

6. 아까 stash 했던 작업 내용 복원

git stash pop
  • 이 명령어로 숨겨놨던 작업 내용이 다시 돌아와.
  • 이때도 충돌 날 수 있어. (파일 수정되었으니까)
  • 충돌 나면 직접 해결하고, add + commit 진행.

 추가 설명: git stash가 하는 일

명령어 설명

명령어 설명
git stash 현재 변경사항 저장하고 깔끔한 상태로 되돌림
git stash list 저장된 stash 목록 확인
git stash pop 가장 최근 stash 복원하고 목록에서 제거
git stash apply stash 복원하되, 목록에서는 안 지움
git stash drop 특정 stash 삭제
git stash clear 모든 stash 삭제

 요약

# 1. 작업 중이던 거 잠깐 숨기고
git stash

# 2. develop 최신화
git checkout develop
git pull origin develop

# 3. 다시 내 브랜치로 가서 최신 내용 반영
git checkout feature/login
git merge develop

# 4. 숨겼던 내 작업 꺼내오기
git stash pop

필요하면 stash 없이 그냥 작업 중 커밋하고 진행해도 돼,
하지만 아직 미완성이라 커밋하고 싶지 않다면 stash가 안전한 방법이야.

더보기

commit과 stash의 차이, 그리고 사용 타이밍

 1. commit = 저장소에 정식으로 기록함

  • 말 그대로 작업 내용을 저장소(history)에 기록하는 거야.
  • git이 "이건 저장해도 괜찮은 완성된 작업"이라고 인식해.
  • 예를 들어서:
  • git add . git commit -m "중간 저장"
  • 이 상태에서 develop 브랜치 최신화해서 가져오고 병합해도,
    이미 네 작업이 저장돼 있으니까 사라지지 않아.
  • 즉, commit은 네 작업을 남기는 공식적인 백업 같은 느낌이야.

 2. stash = 임시 저장 (history에는 안 남음)

  • 아직 커밋할 정도는 아니고,
  • 근데 워킹 디렉토리가 지저분해서 잠깐 치워두고 싶은 상황에 써.
  • stash는 "숨기기"야. 기록에는 안 남아.

예:

git stash        # 잠깐 숨기고
git pull origin develop  # 최신화
git stash pop    # 다시 꺼내오기

 

그러면 언제 stash 말고 commit 써도 되냐?

 너가 작업하던 내용이 "크게 깨지지 않고 쓸 수 있는 수준" 이라면
그냥 commit 해두는 게 더 안전하고 간편해.

예시 흐름 (stash 안 쓰는 방법):

# 1. 일단 내 작업 커밋 (미완성이라도 가능)
git add .
git commit -m "WIP: 로그인 폼 UI 작업 중"

# 2. develop 최신화
git checkout develop
git pull origin develop

# 3. 다시 내 브랜치로
git checkout feature/login

# 4. 최신 develop 내용 merge
git merge develop

※ WIP = Work In Progress (미완성 작업이라는 뜻으로 많이 써)