본문 바로가기
git & github

git github 처음부터 다시 배우기 - 1. git

by spare8433 2023. 2. 5.

배경

git/github 를 처음 쓰게된 시점이 과제로 팀프로젝트를 처음 하게 되었을 때인데 개발도 익숙치 않던 상황에 git 은 물론이요 github 를 얕고 빠르게 GUI 위주로 다뤘었다 그러다 보니 슬슬 한계를 느껴 처음 배우는 것처럼 하나부터 열까지 천천히 다시 배워보려 한다



git 은 무엇인가


깃(Git /ɡɪt])은 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 스냅샷 스트림 기반의 분산 버전 관리 시스템 혹은 명령어를 의미한다.


VCS : Version control system (버전관리 시스템)


※ 부가 설명
Git과 다른 VCS(Subversion 및 그 친구들 포함)의 주요 차이점은 Git이 데이터에 대해 생각하는 방식입니다. 개념적으로 대부분의 다른 시스템은 정보를 파일 기반 변경 목록으로 저장합니다.


Git 은 상태를 커밋하거나 저장할 때마다 기본적으로 모든 파일이 그 순간에 어떻게 보이는지 사진을 찍듯이 해당 스냅샷에 대한 참조를 저장한다.



1. 기본 세팅 관련


Git Bash

  • Git 사용에 적합한 터미널
  • 리눅스/맥(유닉스)에서 사용되는 CLI 명령어들을 윈도우에서 사용 가능 - 타 프로그래밍에도 유용
  • ※ 협업시 윈도우와 맥에서 엔터 방식 차이로 인한 오류를 방지합니다.
    git config --global core.autocrlf true


VSC

  • VS Code에서 Ctrl + Shift + P
  • Select Default Profile 검색하여 선택
  • Git Bash 선택
  • 터미널에서 +로 새 창을 열어서 기본으로 Git Bash가 설정된 것 확인


.git 폴더 생성

※ .git 지우면 Git 관리내역이 삭제됩니다. (현 파일들은 유지)

git init


특정 파일 무시

gitignore 파일 생성


파일 등록 관련 명령어


스테이징

git add


커밋

git commit

# 커밋 메시지와 함께
git commit -m "Replace Lions with Leopards"

# `add`와  `commit`  한꺼번에
git commit -am "(메시지)"


커밋 메시지까지 함께 작성하기

git commit -m "FIRST COMMIT"


커밋 내용 확인

# 위치한 브랜치에서의 내역만 볼 수 있음
git log

# 여러 브랜치의 내역 편리하게 보기
git log --all --decorate --oneline --graph


커밋 내용 자세히 확인

git diff


2. Git에서 과거로 돌아가는 두 방식


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

git reset --hard (돌아갈 커밋 해시)

# 아래 명령어로 현 커밋 상태로 초기화
git reset --hard


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

git revert (되돌릴 커밋 해시)

# 커밋해버리지 않고  revert 하기 스테이징 만 됨
git revert --no-commit (되돌릴 커밋 해시)


수정한 내역이 충돌 충돌시

  • git rm leopards.yaml로 Git에서 해당 파일 삭제
  • git revert --continue로 마무리
  • :wq로 커밋 메시지 저장


3.브랜치


기본 명령어

# `add-coach`란 이름의 브랜치 생성
git branch add-coach

# 브랜치 목록 확인
git branch

# add-coach` 브랜치로 이동
git switch add-coach

# 브랜치 생성과 동시에 이동하기
git switch -c new-teams

# 브랜치 삭제하기
git branch -d (삭제할 브랜치명)

# 커밋내용 무시하고 브랜치 삭제하기
git branch -D (강제삭제할 브랜치명)

# 브랜치 이름 바꾸기
git branch -m (기존 브랜치명) (새 브랜치명)

# 여러 브랜치의 내역 편리하게 보기
git log --all --decorate --oneline --graph


checkout 명령어가 Git 2.23 버전부터 switch, restore로 분리

브랜치 내용 병합 관련


merge : 두 브랜치를 한 커밋에 이어붙입니다. : > ·

  • 주 흐름이 될 곳에서 합쳐질 브랜치를 merge
  • 브랜치 사용내역을 남길 필요가 있을 때 적합한 방식입니다.
  • 다른 형태의 merge에 대해서도 이후 다루게 될 것입니다.

mergereset으로 되돌리기 가능

  • merge도 하나의 커밋이기 때문
  • merge하기 전 해당 브랜치의 마지막 시점으로도 가능
# main 입장에서 add-coach 를 머지해서 합치기
git merge add-coach


rebase : 브랜치를 다른 브랜치에 이어붙입니다. - ···

  • 주 흐름이 될 곳에서 이어붙어질 브랜치로 이동해 main 브랜치로 rebase
  • 한 줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합합니다.
  • 이미 팀원과 공유된 커밋들에 대해서는 사용하지 않는 것이 좋습니다.

※ rebase 이후 브랜치가 뒤쳐져있으므로 merge 까지 이어져야 함

# new-team 브랜치를 `main` 브랜치로 rebase
git rebase main 

# main  브랜치로 이동 후 아래 명령어로  new-teams의 시점으로  fast-forward
git merge new-teams


브랜치 충돌시 처리관련


merge 충돌 해결하기

  • 오류 메시지와 git status 충돌 부분 내용 확인가능
  • 에디터에서 충돌부분만 변경 한후 스테이징 한 후 커밋해서 처리
# 충돌 발생후 처리
git merge conflict-1

# 충돌부분 변경 후
git add ...
git commmit ...

# 당장 충돌 해결이 어려울 경우 아래 명령어로 `merge` 중단
git merge --abort


rebase 충돌 해결하기

  • 오류 메시지와 git status 충돌 부분 내용 확인가능
  • 에디터에서 충돌부분만 변경 한 후 스테이징 한 후 특정명령어로 계속 수정
# 충돌 발생후 처리
git rebase main

# 충돌부분 변경 후 끝날 때까지 반복 
git add ...
git rebase --continue # 커밋내용은 자동으로 적용됨
# Successfully rebased and updated refs/heads/conflict-2.

# 당장 충돌 해결이 어려울 경우 아래 명령어로 `merge` 중단
git rebase --abort