본문 바로가기
개발

[GIT] 실무에서 자주쓰는 Git 명령어 정리

by dohye1 2024. 7. 26.

목차

    반응형

    개발자들은 업무를 할때 대부분 git을 사용해서 코드관리를 할것이다.

    https://mergebase.com/blog/git-v-branching-model/

     

    작업을 하다보면 브랜치를 나눠서 커밋을 작업하는경우가 많을것이고, 커밋의 양도 많아질것인데 

    브랜치를 위 이미지처럼 master, hotfix, release 등 여러개로 나눠서 관리하는 팀에서는 커밋관리가 단순하지는 않을거라고 생각한다.

    develop에는 올라가도되지만 master나 release에는 올리지말아야할 커밋이 있을거고,

    여러 커밋들중 하나만 콕 집어내서 처리해줘야하는 경우도 많았는데, 그럴때마다 git 명령어를 다양하게 사용해서 처리하고있다.

     

    그래서 내가 실무에서 자주쓰는 git 명령어를 정리해보려고 한다.

    git cherry-pick 커밋 복사하기

    - 브랜치에 쌓여있는 특정 커밋을 콕 찝어서 빼올수있다.

    - 커밋을 복사한다고 생각하면 이해가 쉬움

    - current branch 기준으로 커밋을 가져온다.

    - cherry-pick 대상 커밋과 복사된 커밋의 커밋ID는 다르다. 

    사용

    1. 특정 커밋 1개를 가져올때

    git cherry-pick <커밋ID>

    2. 여러개의 연속된 커밋을 가져올때

    git cherry-pick <시작커밋ID>...<종료커밋ID>

     

    cherry-pick을 할때, 해당 브랜치의 소스코드와 cherry-pick 대상이되는 커밋의 소스코드가 충돌이 발생할 수도 있다.

    그럴땐 rebase시 충돌을 해결하는방식과 동일하게 코드를 수정해주고

     

    컨플릭을 다 해결했으면 아래 코드를 실행시키면되고

    git cherry-pick --continue

     

    cherry-pick을 반영하지않고 종료하고싶으면 아래 코드를 실행시키면된다.

    git cherry-pick --abort

     

    git stash 코드 임시 보관하기

    작업을 하다가 일부 수정사항들을 잠시 어딘가에 보관을 해놔야하는경우가 종종있다.

    A 브랜치에서 작업하다가 잠시 B브랜치로 이동해서 다른 작업을 해야하는경우가 있는데,

    1. A에서 수정한 사항내용을 커밋으로 만들어서 보관하고
    2. B브랜치로 이동 후 작업을 완료한 다음

    3. A브랜치로 돌아와 reset해서 다시 작업을 하는방법도 있다.

     

    하지만 이럴땐 stash를 사용할 수도 있다.

     

    stash는 특정시점의 변경사항을 stack에 쌓는방식이다.


    git 문서에도 stash에 대한 설명을 아래처럼 하고있다.

    당신이 어떤 프로젝트에서 한 부분을 담당하고 있다고 하자. 그리고 여기에서 뭔가 작업하던 일이 있고 다른 요청이 들어와서 잠시 브랜치를 변경해야 할 일이 생겼다고 치자. 그런데 이런 상황에서 아직 완료하지 않은 일을 커밋하는 것이 껄끄럽다는 것이 문제다. 커밋하지 않고 나중에 다시 돌아와서 작업을 다시 하고 싶을 것이다. 이 문제는 git stash 라는 명령으로 해결할 수 있다.

    Stash 명령을 사용하면 워킹 디렉토리에서 수정한 파일들만 저장한다. Stash는 Modified이면서 Tracked 상태인 파일과 Staging Area에 있는 파일들을 보관해두는 장소다. 아직 끝내지 않은 수정사항을 스택에 잠시 저장했다가 나중에 다시 적용할 수 있다(브랜치가 달라져도 말이다).

     

    사용

    1. 하던일을 보관하기

    기본적으로는 수정된 내역이 있을때 아래 명령을 실행하면 수정내용들이 특정 Index를 달고 stash stack에 담긴다.

    git stash save

    이때, 만약 수정된내역들 중 새로만들어진 파일있는경우엔 --include-untracked 또는 -u옵션을 붙여서 실행하면 새로 추가된 파일들도 stash에 포함된다!

    git stash save -u 

     

    만약 stash에 이미 추가되어있는 항목이있다면 새로 추가되는 stash내용들은 0번으로 추가되게된다.

     

    기존에 아래 내용이 있는 상태에서

    stash@{0} (첫번째로 stash한 내역)

     

    stash를 추가하게되면 새로 추가된 stash가 0번이 된다! 기존에 있던 stash들은 인덱스가 1씩 올라가게됨!

    stash@{0} (두번째로 stash한 내역)

    stash@{1} (첫번째로 stash한 내역)

     

    2. stash 목록확인

    git stash list

    3. stash에 보관된 코드 꺼내기

    git stash pop

     

    - 현재 checkout한 브랜치에서 위 명령을 실행하면 기본적으로 stash의 0번내용이 워킹디렉토리에 추가된다.(특정 stash를 찝어서 실행시킬수도있음. 그건 밑에서 설명)

    만약 현 브랜치의 소스코드와 충돌이날경우는 Rebase 시 컨플릭을 해결하는것과 동일하게 해주면된다!

     

    위 명령을 실행하게되면 소스코드가 워킹디렉토리에 추가되고, 해당 stash내역은 stash list에서 제거된다!

     

    그리고 

    git stash apply

    를 실행하게되면 Pop과는 다르게 stash list에서 제거되지않는다.

     

    0번 stash말고 특정 stash를 빼올수도있다.

    아래처럼 stash의 번호를 적어주면됨!!

    git stash pop stash@{3}

     

    4. stash list 모두 제거

    git stash clear

     

    git reflog 삭제한 커밋 확인하기 

    - 작업을 하다가 내가 작업한 커밋을 모르고 삭제해버리는 대참사를 한번쯤은 경험해봤을것이다.

    그럴땐 git reflog를 사용하면된다!!!!!!!

    이건 커밋으로 만들어진적이있다면 무조건 남는것같다!

    git reflog

    를 실행하면 아래처럼 커밋 히스토리를 확인할수있다.

    만약 저 커밋중 하나를 다시 살려야하는 상황이라면 커밋ID를 사용해 cherry-pick을 하면된다.

     

    1. 위 이미지에서 보이는 노란색글자가 커밋ID인데, 저 값을 복사해서 git reflog창을 끈다.

    2. 안전한 브랜치로 이동 후 git cherry-pick <복사한 커밋ID>

    3. 그럼 삭제한 커밋을 다시 살릴수있다!

    git remote Git 원격 저장소

    1. git remote 이름 확인하기

    git remote

    를 입력하면 원격저장소의 이름만 출력되고 

    git remote -v

    를 입력하면 원격저장소 이름+주소도 같이 확인가능하다

    그래서 코드를 올릴 대상 저장소가 제대로 연결되어있는지 확인할 때 -v를 붙여서 확인하면된다!

     

    2. 원격 저장소 추가

    git remote add <저장소 별칭> <저장소 주소>
    git remote add origin https://~~

    3. 원격 저장소 삭제

    git remote remove <저장소 별칭>

    git interactive rebase 커밋으로 그림그리기 

    사실 업무할때는 rebase를 가장 많이사용한다!

    rebase에 -i 옵션을 붙여서 쓰면 커밋을 다양하게 조작할 수 있다

    그래서 깃을 잘 다루고싶으면 해당 기능에 대해 꼭 시간을 내서 공부해야한다.

     

    이 부분은 내가 정리하는것보다 재그지그님이 너무 잘 정리를 해주셔서 링크를 첨부하겠음!!

     

     

    Git Rebase --Interactive 옵션 알아보기 - 재그지그의 개발 블로그

    대화형으로 Git 커밋 히스토리를 수정할 수 있게 해주는 Interactive 옵션에 대해 알아봅니다.

    wormwlrm.github.io

     

    정리?

    개인적으로는 git을 잘 써야 업무 효율성이 올라간다고 생각한다.

    그래서 다양한 명령어를 알고있어야 내가 필요한 상황에 적절한 방식으로 일을 할수있다

     

    이번엔 git 명령어를 정리해봤는데, 다음글은 .git파일과 .github 폴더에 대해서 정리해보겠다