[git] Squash 란? 스쿼시하기/ 커밋 단장하기

2024. 7. 9. 16:18·깃 git

Squash란 ? 

스쿼시 해주세요 ~ == 커밋 단장해주세요~~

  • “squash” 는 여러 커밋을 하나로 합치는 것
  • git 브랜치를 병합할때 가장 자주 수행된다.
  • git squash 명령은 없다.

(a) 병합하기 전에 스쿼시하기로 결정하면 기능 브랜치의 모든 개별 커밋이 단일 커밋으로 결합

  • 따라서 주요 커밋 기록은 이 통합에 대한 단일 커밋만 표시
  • 불필요하고 많은 개별 커밋 대신, 주 커밋 기록에 단 하나의 커밋만 나타난다.

Squash 하기 

1. 3개의 커밋을 squash(combined) 하려고 한다.

    제일 오래된 커밋에 합치는것만 가능하다. (452f802a)

  • 제일 최근 커밋에 합치려고하면 오류가 난다. (bcbdb771) 

터미널을 열고 (인텔리제이에서 터미널여는법 -> 창 맨 하단에 run,build 그쪽에 있는 Terminal 을 클릭) 

git rebase -i HEAD~3 

- git rebase -i HEAD~(합치고자 하는 커밋의 개수) 

 

2. 명령어를 작성하고 enter 하면

 2-1. 위에서부터 순서대로 커밋 과거순.

[452f802] 만 두고 밑에 2개의 커밋 pick → s 로 바꾼다.

pick 452f802 페이징 처리 
s 2628763 답변 페이징,정렬 추가 
s bcbdb77 카테고리 오류-

요런식으로 

<리눅스 편집기 명령어> 를 이용해서 

 

3. 커밋 메세지를 편집할 수 있다. 

-->

커밋메세지를 정리했다. 

esc -> :wq 

하면 

성공적으로 squash 가 됐다. 

 

4. 원격 브랜치에 푸시하기 -> push rejected 된다. 

왜 push rejected 가 되는가 ? 

   - 원격 브랜치의 상태 

      A -- B -- C -- commit1 -- commit2 -- commit3 (origin/feature) 

  - 로컬 브랜치의 상태

      A -- B -- C -- squashed_commit1 (feature) 

원격 브랜치의 커밋 히스토리와 로컬 브랜치의 커밋 히스토리가 다르기 때문에 git은 이를 병합 할 수 없다고 판단하고 푸시를 거부한다. 히스토리를 덮어쓰는 것을 방지 하기 위한 보호 장치. 

 

해결방법 

 

4.1 강제 푸시 

 git push -u origin +(branch 명) 

 

4.2 원격 브랜치 삭제후 push 

      잘못하면 작업한 코드가 사라질 위험이 있음. 

 

4.2 base 커밋에서 temp브랜치를 따서 (feature/test-temp 브랜치) 내가 한 작업 cherry pick 으로 넣기 

 

 

push 까지 완료하면 끝 

'깃 git' 카테고리의 다른 글

[git] Rebase란? / rebase 하기 (+소스트리)  (1) 2024.07.08
[github config] 단일 저장소만 사용자이름, 이메일 다르게  (0) 2024.05.20
깃 branch 개념  (0) 2023.06.28
'깃 git' 카테고리의 다른 글
  • [git] Rebase란? / rebase 하기 (+소스트리)
  • [github config] 단일 저장소만 사용자이름, 이메일 다르게
  • 깃 branch 개념
니블
니블
  • 니블
    기록장
    니블
  • 전체
    오늘
    어제
    • 분류 전체보기 (87)
      • 카프카 Kafka (2)
      • 데이터베이스 db (3)
      • 깃 git (4)
      • 백준 baekjoon (31)
      • 백엔드 back-end (20)
      • 점프 투 스프링부트 (8)
      • 메세지 큐 mq (3)
      • 개발도구 tool (3)
      • 레디스 Redis (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    kafka
    1927
    스프링부트
    gitconfig
    Message Queue
    로거
    최대힙
    reids-cluster
    이벤트스트리밍
    레디스 클러스터
    백준
    리베이스
    guard clause
    db
    트러블슈팅
    SQUASH
    rebase
    mysql
    Git
    EC2
    @value
    메세지큐
    분산처리
    AWS
    자바
    heapq
    redis
    분산구조
    2108
    사용자이름
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
니블
[git] Squash 란? 스쿼시하기/ 커밋 단장하기
상단으로

티스토리툴바