Git Alias: 잘못된 브랜치에서 커밋 복구

발행: (2025년 12월 3일 오후 02:34 GMT+9)
6 min read
원문: Dev.to

Source: Dev.to

Cover image for Git Alias: Rescue Commits from the Wrong Branch

왜 지금이 그 어느 때보다 중요한가

AI‑보조 개발 시대에 잘못된 브랜치에 커밋하는 일이 점점 더 흔해지고 있습니다.

AI 워크플로우 현실

AI 코딩 어시스턴트(Claude, Cursor, GitHub Copilot 등)를 사용할 때 워크플로우가 크게 바뀝니다:

  • 빠른 반복 – 코드가 훨씬 빠르게 생성되고 테스트됩니다.
  • 컨텍스트 전환 – 여러 기능과 실험 사이를 오갑니다.
  • 탐색적 코딩 – “만약에” 시나리오를 시도하는 비용이 낮습니다.
  • 절차 감소 – IDE 스캐폴딩에 쓰는 시간이 줄어들고 실제 코딩에 더 많은 시간을 씁니다.

이러한 속도 때문에 전통적인 “브랜치 생성 → 전환 → 커밋” 절차를 따르지 못하고 main에 실수로 커밋하는 경우가 늘어납니다.

그냥 대충 하면 안 되는 이유

  • 수동 수정은 오류가 발생하기 쉽다git reset, 체리‑픽, 리베이스 등에서 한 단계라도 놓치면 작업이 사라질 수 있습니다.
  • 흐름을 깨뜨린다 – git 명령을 찾아보는 데 몇 분을 쓰면 AI 코딩이 제공하던 모멘텀이 사라집니다.
  • 더 자주 일어난다 – AI를 쓰다 보면 이 실수를 주간 혹은 일간으로 겪을 수 있습니다.
  • 팀 마찰main에 실수로 커밋하면 팀 전체에 영향을 미칩니다.

자동화 마인드셋

AI를 활용해 개발 속도를 높인다면, 실수 복구도 자동화해야 합니다. 아래 git 별칭은 안전망 역할을 합니다: 한 번의 명령, 몇 초면 원래대로 돌아갑니다.

문제 상황

잘못된 브랜치에 아직 푸시되지 않은 로컬 커밋이 여러 개 있고, 다음을 해야 합니다:

  1. 해당 커밋들을 새로운 브랜치로 옮긴다.
  2. 원본 브랜치를 원격 상태와 동일하게 리셋한다.
  3. 모든 작업을 보존한다.

해결책

다음 git 별칭을 추가하면 한 번의 명령으로 커밋을 구조조정할 수 있습니다:

git config --global alias.move-commits '!f() { \
    CURRENT=$(git branch --show-current); \
    NEW_BRANCH=${1:-rescued-commits}; \
    git branch $NEW_BRANCH && \
    git reset --hard origin/$CURRENT && \
    git checkout $NEW_BRANCH; \
}; f'

사용 방법

# 커밋을 "feature-branch"라는 이름의 브랜치로 이동
git move-commits feature-branch

# 또는 기본 이름 "rescued-commits" 사용
git move-commits

동작 원리

  1. 현재 브랜치 이름을 캡처 – 어떤 브랜치를 리셋할지 결정합니다.
  2. 현재 커밋에서 새 브랜치를 생성 – 작업을 모두 보존합니다.
  3. 원본 브랜치를 원격 상태로 리셋git reset --hard origin/BRANCH.
  4. 새 브랜치를 체크아웃 – 즉시 작업을 이어갈 수 있습니다.

수동 설치

~/.gitconfig를 직접 편집하고 싶다면 [alias] 섹션에 다음을 추가하세요:

[alias]
    move-commits = "!f() { CURRENT=$(git branch --show-current); NEW_BRANCH=${1:-rescued-commits}; git branch $NEW_BRANCH && git reset --hard origin/$CURRENT && git checkout $NEW_BRANCH; }; f"

참고 사항

  • 별칭은 원격 이름이 origin이라고 가정합니다. 원격 이름이 다르면 origin/을 해당 이름으로 바꾸세요.
  • 푸시된 커밋에는 작동하지 않습니다. 푸시된 커밋을 되돌리려면 다른 방법이 필요합니다.
  • --hard 리셋은 커밋되지 않은 변경 사항을 모두 버리므로, 별칭을 실행하기 전에 모든 작업이 커밋돼 있는지 확인하세요.

왜 작동하는가

Git에서 브랜치는 단순히 커밋을 가리키는 포인터일 뿐입니다. 현재 커밋에 새 브랜치를 만들면 포인터가 추가되는 것이고, 이후 원본 브랜치 포인터를 원격 상태로 되돌려도 작업은 손실되지 않습니다.


다음에 잘못된 브랜치에 커밋했을 때 머리를 싸매지 마세요. 이 별칭을 추가하고 한 번의 명령으로 커밋을 구조조정하세요.

Back to Blog

관련 글

더 보기 »

Git을 사용한 브랜치 개발

git을 사용한 Branch 개발을 위한 커버 이미지 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-up...

core.async: 심층 탐구 — 온라인 밋업

이벤트 개요: 12월 10일 GMT+1 기준 18:00에 Health Samurai가 온라인 밋업 “core.async: Deep Dive”를 주최합니다. 이번 강연은 clojure.core의 내부를 파헤칩니다....