포스트

[Git] Git 명령어 정리

git merge 3가지 방법

  1. 3-way merge 브랜치 각각(ex: main branch와 dev branch)에 신규 commit이 1회 이상 있는 경우 merge를 하게 되면 두 branch 코드가 합쳐져서 main branch에 새로운 commit이 생성되는 것.
  2. fast-forword main branch에는 새로운 commit이 없고 dev branch(만든 branch)에만 새로운 commit이 있는 경우 dev branch를 main branch라고 선언하게 된다. 즉, 분기가 없어지고 main에서 새로운commit이 생성된 것과 같은 현상이 발생.
  3. rebase & merge rebase를 이용해서 신규 branch의 시작점을 main branch의 최근 commit으로 옮긴 다음 fast-forword merge 하는 방법.

    1
    2
    3
    4
    5
    6
    7
    8
    
    revbase & merge 하는 이유
    	1. 3-way-merge 말고 강제로 fast-forword merge 하고 싶은 경우
    	2. commit 내역을 한 줄로 계속 이어서 남기고 싶은 경우
    
    사용 방법
    	1. 새로운 branch 이동
    	2. `git rebase main` 명령어 사용
    	3. main branch에서 fast-forword merge
    

코드 되돌리기

  1. git restore [파일명] 최근 commit된 상태로 현재 파일의 수정내역을 되돌린다.

  2. git restore –source [commit아이디] [파일명] 입력한 파일이 특정 commit 아이디 시점으로 되돌아 간다.

  3. git resotre –staged [파일명] 특정 파일을 staging 취소.

  4. git revert [commit아이디]

    1
    2
    3
    4
    
    kl2j32k c작업
    lkljlk4 b작업
    lk34j33 a작업
    
    
    1. 예를 들어 위와 같은 commit 내역이 있는 경우 b작업 내역을 지우고 싶다면 git revert [commit아이디] 명령어로 b작업 취소 -> c작업에는 영향 없음.
    2. 그냥 최근 commit 내역을 삭제하고 싶다면 git revert HEAD
  5. git reset –hard [commit아이디]

    1. git reset --hard [commit아이디] 명령어는 협업시 사용하지 않는 것이 좋다.
    2. 다른 개발자의 작업까지 취소해버리는 위험한 명령어
    3. 그래서 짧은 commit내역으로 돌아가거나 혼자 작업할 경우 유용함
  6. git reset –soft [commit아이디] reset를 하긴하는데 hard 옵션과 같이 전부 삭제하는 것이 아닌 해당 commit이 staging 형태로 남아 있음

  7. git reset –mixed [commit아이디] reset를 하는데 해당 commit 했던 내역이 staging 형태도 아닌 수정된 상태에서 남아 있음 -> git add전 상태


원격저장소 관련

  1. 원격저장소에서 repository 생성 후 로컬과 연결
    1. 원격저장소에서 새로운 repository 생성
    2. git init : 작업 폴더에 로컬 git repository 생성
    3. git branch -M main : main branch이름을 main으로 지정
    4. git push -u [원격저장소주소] main : 원격저장소에 push
    5. git remote add origin [원격저장소주소] : 원격저장소 주소를 매번 쓰기 귀찮으니 origin이라는 변수명에 담는 과정
    6. .gitignore
    7. 원격저장소에 올리고 싶지 않은 파일을 .gitignore에 입력하면 원격 저장소에 안올라간다.
    8. 보통 node_modules.env 파일은 올리지 않음

git branch 전략 2가지

  1. git flow

    1. main : main branch
    2. develop : main에서 merge를 바로 해버리면 위험하다고 판단하여 develop branch를 생성하여 확인 후 main에 merge
    3. feature : develop branch에서 기능 단위로 개발할 경우 feature branch를 생성하여 기능 개발 후 develop branch로 merg
    4. release : main branch에 merge하기 전 release branch에서 QA나 여러가지 테스트 진행
    5. hotfix : 긴급하게 수정해야 되는 경우 hotfix branch를 생성하여 작업 후 merge
  2. Trunk-Based

    1. main branch에서 기능 개발 branch인 feature branch를 생성하거나 hotfix branch를 생성하여 완료되면 main branch에 바로 merge
    2. 이 전략은 테스트 자동화나 철저한 코드리뷰가 바탕이 되었을 경우 진행
    3. 아니면, 초반에는 git flow 전략으로 개발을 진행하다가 어느정도 안정화가 이루어 진 후trunk-based 전략으로 변경하는 것도 좋은 방법

코드 임시 보관

  1. git stash

    1. 방금 작성한 코드가 임시 저장된다
    2. staging 된 것이든 안 된 것이든 임시 저장됨
    3. git stash save 'message' 메시지와 같이 임시 저장
    4. stash 목록이 많은 경우 찾기 좋음
  2. git stash list

    1. git stash한 리스트 목록 확인
  3. git stash pop

    1. 최근 stash한 코드를 불러온다
    2. 당연히 겹치는 코드가 있다면 conflict가 발생
  4. git stash drop [삭제할 id]

    1. git stash 목록에서 원하는 목록 삭제
    2. 삭제할 id는 git stash list 하면 보이는 아이디(ex: 0,1,2 등등)
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.