전체 되돌리기 브랜치 원격 Stash 히스토리 병합

Git 상황별 명령어 참조

Git은 강력하지만 명령어 구문을 기억하기 어려울 수 있습니다. 특히 자주 사용하지 않는 작업의 경우 더욱 그렇습니다. 이 도구는 실제 Git 상황을 정확한 명령어에 매핑하며, 일반 텍스트 설명과 되돌릴 수 없는 작업에 대한 경고를 제공합니다.

위험한 Git 작업 vs 안전한 Git 작업

일부 Git 작업은 안전하고 되돌릴 수 있습니다 (커밋, 브랜치, stash). 다른 작업은 영구적으로 히스토리를 변경하거나 부주의하게 사용하면 데이터 손실을 일으킬 수 있습니다:

  • 안전: git stash, git branch, git checkout, git merge, git commit
  • 주의 필요: git reset --hard, git push --force, git rebase (히스토리 재작성), git clean -fd
  • 공유 브랜치에서 절대 금지: main/master에 강제 푸시, 공개 커밋 rebase

Git 모범 사례

  • 변경 작업 전에 항상 브랜치를 생성하세요 - main에서 직접 작업하지 마세요
  • 명확하고 설명적인 메시지로 자주 커밋하세요
  • 커밋 전에 git statusgit diff를 사용하세요
  • 공유 브랜치에서는 git reset --hard보다 git revert를 선호하세요
  • 진행 중인 작업을 임시로 저장하려면 git stash를 사용하세요

팀을 위한 Git 워크플로: 올바른 전략 선택하기

올바른 Git 워크플로를 선택하는 것은 팀 생산성에 가장 큰 영향을 미치는 결정 중 하나입니다. 잘못된 워크플로는 머지 충돌, 배포 차단, 코드 리뷰 지연을 초래합니다. 다음은 가장 인기 있는 전략과 각각의 사용 시점입니다.

인기 있는 Git 브랜치 전략

  • GitHub Flow: 간단하고 효과적. main에서 기능 브랜치를 생성하고, PR을 열고, 리뷰 후 머지. 지속적 배포와 작고 빈번한 릴리스를 하는 팀에 최적. GitHub, Shopify, 많은 스타트업에서 사용.
  • GitFlow: develop, feature, release, hotfix 브랜치를 사용. 더 구조화되어 있지만 무겁습니다. 예정된 릴리스가 있는 팀(모바일 앱, 엔터프라이즈 소프트웨어)에 최적.
  • 트렁크 기반 개발: 모든 사람이 main(트렁크)에 자주 커밋하고, 단기 기능 브랜치(최대 1-2일) 사용. 미완성 작업에는 기능 플래그 필요. Google, Facebook, Netflix에서 사용. 강력한 CI/CD를 갖춘 경험 많은 팀에 최적.

모든 개발자가 마스터해야 할 Git 명령어

  • git rebase -i: 인터랙티브 리베이스로 푸시 전에 커밋을 스쿼시, 재정렬, 편집, 삭제할 수 있습니다. 깔끔하고 리뷰하기 쉬운 커밋 히스토리에 필수. git rebase -i HEAD~5로 최근 5개 커밋을 재구성.
  • git bisect: 버그를 도입한 커밋을 찾기 위한 이진 탐색. git bisect run <test-command>로 자동화 가능. 1000개 커밋에서 단 10단계로 버그를 찾을 수 있습니다.
  • git stash: 브랜치를 전환하기 위해 변경사항을 임시로 보관. git stash push -m "설명"으로 메시지와 함께 저장하여 각 stash의 내용을 기억합니다.
  • git reflog: 안전망 — reset과 rebase 후에도 모든 HEAD 이동을 보여줍니다. 커밋을 잃은 경우 git reflog로 90일 이내에 복구할 수 있습니다.

Git에 대한 자주 묻는 질문

변경 사항을 유지하면서 마지막 Git 커밋을 되돌리려면 어떻게 하나요?

git reset --soft HEAD~1을 사용하면 마지막 커밋을 되돌리면서 모든 변경 사항을 스테이지에 유지합니다. git reset HEAD~1 (mixed 모드, 기본값)을 사용하면 커밋을 되돌리고 변경 사항을 언스테이지하지만 작업 디렉토리에는 유지합니다. 모든 변경 사항을 영구적으로 삭제하려면 git reset --hard HEAD~1을 사용하세요 - 이 작업은 되돌릴 수 없습니다.

로컬 및 원격 브랜치를 삭제하려면 어떻게 하나요?

로컬 브랜치는 git branch -d branch-name (안전, 병합 필요) 또는 git branch -D branch-name (강제 삭제)으로 삭제합니다. 원격 브랜치는 git push origin --delete branch-name으로 삭제합니다. 오래된 원격 추적 참조를 정리하려면 git fetch --prune 또는 git remote prune origin을 실행하세요.

git merge와 git rebase의 차이점은 무엇인가요?

git merge는 두 브랜치를 합치는 새로운 병합 커밋을 생성하면서 전체 히스토리를 보존합니다. git rebase는 다른 브랜치 위에 커밋을 재적용하여 깔끔한 선형 히스토리를 만듭니다. 공개 및 공유 브랜치에는 merge를 사용하세요 - 안전하고 비파괴적입니다. rebase는 병합 전 로컬 기능 브랜치에만 사용하세요. 이미 공유 원격 브랜치에 푸시된 커밋은 절대 rebase하지 마세요 - 히스토리를 다시 작성하여 다른 기여자가 분기된 히스토리를 조정해야 합니다.

마지막 커밋에서 변경된 내용을 보려면 어떻게 하나요?

git show를 사용하면 커밋 메시지, 작성자, 날짜 및 전체 패치를 포함한 가장 최근 커밋의 diff를 볼 수 있습니다. 전체 diff 없이 요약만 보려면 git show --stat을 사용하세요. 두 특정 커밋을 비교하려면 git diff commit1 commit2를 사용하세요. 특정 파일의 히스토리를 보려면 git log --follow -p -- filename을 사용하세요.

관련 개발자 도구