지식보부상님의 공부 일지

Git 사용하기 본문

KB IT's Your Life

Git 사용하기

지식보부상님 2025. 3. 17. 17:11

[1] Git 시작하기

- Version Control System : 버전 관리를 해주는 시스템 

  - Centralized Version Control: 중앙 서버에서 관리(중앙 집중형)

    => 중앙 서버에서 오류가 나면 큰 문제가 일어남 (과거에 주로 이용)

  - Distributed Version Control: 각 사용자가 모두 소스를 다운받아 각자 작업 후 병합 ex) Git

    => 중앙 서버가 오류가 나더라도 각 사용자의 소스를 바탕으로 쉽게 복구 가능

출처: https://k21academy.com/devops-job-bootcamp/git-overview-workflow-advantages/
https://creamycream.notion.site/Git-88e7de3be600435f8b577a06529cc395

[2] Git 설치하기

Git 설치 후 기본 설정

# 유저 설정
git config --global user.name <유저이름>
git config --global user.email <유저이메일>

# 개행 문자 자동 변환
git config --global core.autocrlf true # for windows
git config --global core.autocrlf input # for mac

# 기본 편집기 설정
git config --global core.editor "code --wait" # vscode

 

[3] 저장소 만들기와 커밋(Commit) 하기

◈ 리눅스 명령어

분류 명령어 설명
경로 접근, 내용 확인 ls 디렉토리 내 파일 조회 / -al : 숨김 파일까지 조회
  cd 경로 변경
.  : 현재 경로 / .. : 상위 경로 / ~ : home / - : 직전 경로
  pwd 현재 위치 출력
  clear 현재 콘솔 내용 지우기
파일 생성/삭제/읽기 touch  빈 파일 생성 / touch 파일.확장자
  echo 텍스트/변수를 콘솔에 출력
echo "내용" > 파일명 : 파일 생성하여 "내용" 저장 /
                                    기존에 있는 파일이면 덮어씀
echo "내용" >> 파일명: 기존 파일 마지막에 "내용" 추가
  cat 파일 내용 출력
-n : 각 줄에 번호를 붙여서 출력
cat file1 file2 > mergefile : file1, file2 를 병합하여 mergefile 파일로 저장
  cp 파일 복사
cp file1 file2 : file1을 file2에 복사하여 저장 (file2 있으면 덮어쓰기)
cp <파일명> <경로> : 파일을 경로 폴더에 복사 
  mv 파일/폴더 이동, 이름 변경
mv file1 file2 : file1을 file2로 이름을 바꾸기
  rm 파일 삭제 (디렉토리는 그대로)
-rf : 경로에 있는 전부 강제 삭제
  code 파일을 VS Code 로 열기
디렉토리 생성 mkdir 디렉토리 생성
  rmdir 디렉토리 삭제

 

◈ git 저장소 생성 및 커밋

명령어 설명
git init 저장소 생성
git add <filename> 저장소에 파일 추가 ( staging area 에 올리기)
git add . : 모든 파일 추가
git commit 저장소에 변경한 내용을 반영
git commit -m "메세지" : 메세지 추가하여 반영
git commit --amend : 스테이징 영역 내용을 마지막 커밋에 같이 추가
git status 저장소(현재 파일)의 상태/ 변경사항 등 확인
git diff git diff: 커밋 전 작업 디렉토리에서의 파일 내용의 변경 사항 보여줌
git diff --staged: 커밋 후 스테이징된 파일의 변경 사항 보여줌 
git log 각각의 커밋에 대한 내용 확인 가능 (최신->과거 순)
git log --patch: 각 커밋의 diff 확인
git log --oneline: 커밋 한개당 한줄씩으로 로그 조회
git log --graph: 브랜치, 머지 등의 히스토리를 아스키 그래프로 보여줌
git restore <filename> 마지막 커밋 상태로 파일 복구
git clean  git clean -f : 스테이징 영역에 반영 안된 추적되지 않은 파일 삭제
git clean -fd : 스테이징 영역에 반영 안된 추적되지 않은 파일 및 디렉토리 삭제
git rm 파일 삭제와 동시에 스테이징 영역에 변경한 사항 등록
git mv 파일 이동(이름 변경 포함)과 동시에 스테이징 영역에 변경한 사항 등록

 

 

[4] Branch

  branch

- Git에서 프로젝트의 독립적인 작업 공간 => 다른 부분에 영향을 주지 않으면서 별도로 작업 가능

- main / master : 프로젝트의 기본 branch

출처: https://www.tpointtech.com/git-branch

 

◈ branch와 관련된 명령어

명령어 설명
git branch git branch: 현재 있는 branch 확인
git branch -r: 원격 저장소 내 branch 확인
git branch <브랜치명>: 새로운 브랜치 생성
git branch -d <브랜치명>: 해당 브랜치 삭제
git branch -D <브랜치명>: 해당 브랜치 강제 삭제
git checkout 새로운 branch 로 이동
git checkout <브랜치명> : 해당 브랜치로 이동
git checkout -b <브랜치명> : 새로운 브랜치 만들고, 해당 브랜치로 이동
git switch 새로운 branch 로 이동
git switch <브랜치명> : 해당 브랜치로 이동
git switch -c <브랜치명> : 새로운 브랜치 만들고, 해당 브랜치로 이동

 

[5] Merge, 충돌 해결

◈ merge 

- 두 브랜치를 병합하여 하나의 브랜치로 만드는 작업

- 두 브랜치에서 각각 동일한 파일 수정시 병합 충돌 발생

  => 사용자가 수동으로 충돌 해결해야 ( 충돌한 파일 내용을 수정 후 git add -> git commit 다시 실행)

명령어 설명
git merge git merge <브랜치명> : 명시한 브랜치를 현재 브랜치와 병합
git merge --abort 병합 취소 / 충돌 발생시 사용
git rebase git merge와 기능 동일 but 커밋 히스토리가 다름
git log 두 브랜치간 비교 / 머지 전 하는 것 권장
git log a..b : a에는 없고 b에만 있는 커밋 히스토리 ( b-a 내용)
git log b --not a : a에는 없고 b에만 있는 커밋 히스토리 ( b-a 내용)
git log a...b : a, b 중복되는 내용 제외하고 전부 조회

 

- gitk : Git의 그래픽 사용자 인터페이스(GUI) 도구 / 커밋 내역, 브랜치, 병합 내역 등의 시각적인 확인 가능

- git rebase와 merge의 차이점: 최종 결과는 동일

  - rebase는 브랜치 변경사항을 순서대로 다른 브랜치에 적용하면서 합침

  - merge는 두 브랜치 최종 결과만을 이용하여 합침

[6] 원격 저장소 생성

- 본인 local에 저장한 사항들을 git 에 올리는 과정

◈ 원격 저장소 생성 후 push 하기

- github.com 에서 로그인 후 다음과 같이 원격 저장소 생성

- git bash 에서 원하는 디렉토리로 이동

git clone <git에서 복사한 주소>
git push

 

◈ 관련 명령어

명령어 설명
git remote 현재 프로젝트에 연결된 모든 원격 저장소의 목록 보여줌
git remote -v : 연결된 원격 저장소의 URL을 포함한 목록 보여줌
git remote add <name> <url> : 원격 저장소를 추가
    <name>  :원격 저장소 이름 /  <url> :  주소
git remote remove <name> : 연결된 원격 저장소 제거
git clone 원격 저장소 내용 복제 => 로컬 현재 경로에 새로운 저장소 생성

 

[7] 원격 저장소와 PR(Pull Request)

◈ 관련 명령어

명령어 설명
git clone 원격 저장소 내용 복제
git push 원격 저장소에 로컬 내용 보내기
git pull  원격 저장소 내용 가져오기
git fetch 원격 저장소에서 변경된 내용만 가져오기 (서버에 존재 but 로컬에 없는 데이터만)
git revert 기존 커밋 취소, 새로운 커밋 생성
git cherry-pick 다른 브랜치에서 특정 커밋들만 선택해서 현재 브랜치에 적용