SCM/Git&Github

Git 명령어 모음

전예방 2023. 12. 11. 01:58
💡Git 명령어 공부하기

 

.git 폴더가 형상관리를 해주는 폴더!

궁극적으로 .git 폴더만 잘 보관하면 기록이 남아있다.

 

타임캡슐에 묻기

  • git status : untracked 파일 (git의 관리에 들어간 적 없는 파일)
  • git add [파일명] : 파일 하나 담기
    • git add [파일명, 파일명, …]
    • git add . : 모든 파일 담기
  • git commit : 커밋하기
    • git commit -a : 커밋 메세지와 함께 커밋하기
    • git commit -am : add랑 커밋 메세지와 한꺼번에 커밋하기 (🍎 새로추가된 untracked 파일 없을 때 한정)
  • git log : 깃 상태 확인
    • git log --all --decorate --oneline --graph : 여러 브랜치의 내역 편리하게 그래프로 보기
  • git diff : 파일의 수정된 부분 보여줌

과거로 돌아가기

reset : 원하는 시점으로 돌아간 뒤 이후 내역들을 지웁니다.

  • git reset --hard [돌아갈 커밋 해시]
    • git reset --hard : 뒤에 커밋해시가 없으면 마지막 커밋을 가리킴

revert : 되돌리기 원하는 시점의 커밋을 거꾸로 실행합니다.

  • git revert [되돌릴 커밋 해시]
  • git revert —no-commit [되돌릴 커밋 해시] : 커밋해버리지 않고 revert 하기, 원하는 다른 작업을 추가한 다음 함께 커밋
    • 취소하고 싶으면 git reset --hard

브랜치 생성 / 이동 / 삭제하기

  • git branch : 브랜치 목록 확인
  • git branch [브랜치명] : 해당 브랜치 생성
  • git switch [브랜치명] : 해당 브랜치로 이동
    • git switch -c [브랜치명] : 브랜치 생성 & 이동하기
  • git branch -d [삭제할 브랜치] : 브랜치 삭제하기
    • git branch -D [강제삭제할 브랜치명] : 강제 삭제할 브랜치 (지워질 브랜치에만 있는 내용의 커밋이 있을 경우, 즉 다른 브랜치로 가져오지 않은 내용이 있는 브랜치를 지울 때는 대문자 -D 로 강제 삭제해야함
  • git branch -m [기존 브랜치명] [새 브랜치명] : 브랜치 이름 바꾸기
  • git branch --all : 로컬과 원격의 브랜치들 확인
    • git branch --a : 위에 명령어와 동일

브랜치 합치기

merge : 두 브랜치를 한 커밋에 이어붙입니다. (브랜치 사용내역을 남길 필요가 있을 때 적합한 방식입니다.)

 

1. main 브랜치로 이동함
2. git merge [합칠 브랜치] : 현재 있는 브랜치에 [합칠 브랜치]를 한 커밋에 이어 붙임 

→ merge도 하나의 커밋이라서 merge 하기 전 해당 브랜치의 마지막 시점으로 reset 사용해서 되돌리기 가능함
3. git branch -d [합쳐진 브랜치] : 다 합친 브랜치는 삭제해줌 (합칠 브랜치 === 합쳐진 브랜치)

 

rebase : 브랜치를 다른 브랜치에 이어붙입니다. (한 줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합합니다.  이미 팀원과 공유된 커밋들에 대해서는 사용하지 않는 것이 좋습니다.)

 

→ merge와 반대로 브랜치를 입력해야함
1. new-teams 브랜치로 이동함
2. git rebase [합쳐질 브랜치] : ex ) new-teams 브랜치가 main 브랜치로 합치려면 git rebase main 이라고 명령어 작성해야함
→ 소스트리에서 상태를 확인해보면, main 브랜치는 뒤쳐져있는 상황일 것임
3. main 브랜치로 이동 후, git merge new-teams 명령어를 입력해준 후 new-teams 브랜치 삭제


충돌 해결하기

merge 충돌 해결

  • 충돌 해결이 어려우면 git merge --abort 로 merge 중단
  • 해결 가능 시
    1. 충돌 수정함
    2. git add . → git commit 으로 병합 완료
    3. 병합 완료한 브랜치 삭제

main 브랜치에 new-teams를 merge 했다.

  • accept current change : main 브랜치의 소스
  • accept incoming change : new-teams에 있던 소스
  • accept both changes : 둘다 사용함

rebase 충돌 해결

  • 충돌 해결이 어려우면 git rebase --abort로 rebase 중단
  • 해결 가능 시
    1. 충동 부분을 수정함
    2. git add . → git rebase --continue → 충돌이 모두 해결될 때까지 반복
    3. main 브랜치로 이동해서 git merge new-teams 로 마무리
    4. 병합 완료한 브랜치 삭제

원격 저장소 사용하기

  • git remote add origin [원격 저장소 주소] : 로컬 git 저장소에 원격 저장소 연결
    • 원격 저장소 이름에 흔히 origin 사용함 (다른 것으로 수정 가능)
  • git branch -M main : 기본 브랜치명을 main으로 함
  • git push -u origin main : 로컬 저장소의 커밋 내역을 원격 저장소 (origin) 으로 push (업로드)
    • git push -set-upstream origin main : 위와 동일한 명령어
  • git remote : 원격 목록 보기
    • git remote -v : 원격 목록 자세히 보기
  • git remote remove [origin 등 원격 이름] : 원격 지우기 (로컬 프로젝트와의 연결만 없애는 것. GitHub의 레포지토리는 지워지지 않음)
  • git clone [원격 저장소 주소] : 해당 폴더 안에 프로젝트 다운받음
    • git clone [원격 저장소 주소] . : 해당 폴더 안에 바로 프로젝트 다운받음

원격의 브랜치 로컬에 받아오기

  1. git fetch : 원격의 변경사항 확인
    • git branch -a로 확인
  2. git switch -t origin/from-remote : 로컬에 같은 이름의 브랜치를 생성하여 연결하고 switch
  • git push [원격 이름] --delete [원격의 브랜치명] : 원격의 브랜치 삭제

원격 저장소로 push / pull

  • git push === git push -u origin main : 원격으로 커밋 밀어올리기
    • git push --force : 로컬의 내역 강제 push
  • git pull : 원격으로 커밋 당겨오기

pull 할 것이 있을 때 push를 하면?

  • pull 을 무조건 먼저해야함, 원격에 먼저 적용된 새버전을 받고나서 push 할 수 있음

push 할 것이 있을 시 pull 하는 두 가지 방법

  1. git pull --no-rebase - merge 방식
  2. git pull --rebase- rebase 방식

 

'SCM/Git&Github'의 다른글

  • 현재글 Git 명령어 모음