개발지식 먹는 하마 님의 블로그

협업과 코드 관리를 위한 Git 본문

개발 지식

협업과 코드 관리를 위한 Git

devhippo 2025. 2. 17. 20:40

Git : 코드 변경점을 기록하여 버전(형상)을 관리하기 용이한 도구

Github : 온라인으로 백업, 공유, 협업을 할 수 있는 온라인 코드 저장소

Git, 3개의 공간

  1. working Directory
  2. Staging Area
  3. Repository

Working Directory

작업 공간, Git으로 관리하는 디렉토리

Staging Area

working Directory에서 add로 추가된 파일이 존재하는 영역
Commit 되기 전 대기실

Repository

최종 저장소


[ Branch ]

브렌치는 독립적으로 어떤 작업을 진행하기 위한 개념이다.
나는 평소 working Directory와는 약간 다른 느낌의 작업 공간이라고 생각했다.

main에 적용할 정도는 아니고 그냥 간략하게만 구현한 코드를 main branch에 바로 업로드하면
협업자들이 그 코드를 가져왔을 때, 이게 뭐야 싶고 오류가 날 수도 있지 않은가?
이럴 때 일단 별도의 branch에 올려서 나머지 작업을 완료하고 최종 결과물을 main에 반영하는 느낌이다.

Git으로 협업을 하긴 하는데 각자의 작업 공간이 생기는 것이다.
여러명이 동시에 작업할 때, 다른 사람에게 영향을 주거나 받지 않기 위해, 팀 프로젝트에서 많이 활용된다.


[ rebase ]

Base를 다시 설정하는 작업
공통 Base를 가진 Branch에서 한 Branch의 Base를 다른 Branch의 최신 커밋으로 Base를 옮기는 작업
한 브랜치의 커밋들을 다른 브랜치의 끝으로 이동시킨다.

1. 공유 Branch의 최신 변경사항을 즉각 반영할 수 있다.
2. 커밋 이력을 남기지 않아 이력이 깔끔해진다.

그러나 잘못 사용하면 매우 위험하다.

https://tlatmsrud.tistory.com/156

 

[Git] Git Rebase 란? / 쉽게 이해하기 / 예시

1. 개요 앞선 포스팅에서는 Git Merge 에 대해 알아봤다. 코드 충돌이 나는 원인과 과정을 이해하고, Fast Forward Merge , 3-Way-Merge 가 어떤 상황에 발생하는지도 알았다. 다음은 병합과 연관되는 또 다른

tlatmsrud.tistory.com

 


기본적인 리눅스 명령어

pwd 현재 내가 작업하는 폴더
~ : Home
ls 현재 폴더 안에 있는 폴더 & 파일 내역
-a : 숨겨진 파일도 모두 볼 수 있음
cd 경로 또는 폴더명 폴더 이동
.. : 한 단계 상위 폴더
mkdir 폴더명 현재 경로에서 폴더 생성
touch 파일명 현재 경로에서 파일 생성
(정확히는 생성, 날짜, 시간을 변경하는 명령어)

Git 필수 명령어

git init git 폴더 생성, 코드 변경을 git에서 추적하기 시작한다.
git status 저장 되기 전 상황을 확인한다.
ex) 코드의 변경은 있지만 add하지 않은 파일
git clone <github 주소> 코드 복사해오기
이미 폴더가 있으면 . 없으면 . 빼기

저장 

git add 파일명 저장할 파일 지정
 .  : 경로 내의 모든 변경 사항을 지정함
git commit -m "메세지" 실제로 저장
-m : 어떤 부분을 추가 및 변경했는지 자세하게 적는 것이 좋다
git push origin 브랜치 명 내가 변경한 코드 업로드
git pull 다른 사람이 변경한 코드 내 코드에 반영하기
git log 저장 내역 확인

Branch

git branch 브랜치 목록 조회
-v : 목록 + 각 브랜치 최근 커밋
-d "브랜치명" : 브렌치 삭제
-D : 브렌치 강제 삭제

git checkout -b "브랜치 명" 브랜치 생성 및 전환 / 전환만 하고 싶을 때는 -b 제외
git switch - c "브랜치명" 브랜치 생성 및 전환  / 전환만 하고 싶을 때는 -c 제외
git merge "브랜치명" 현재 브랜치와 지정된 브랜치가 병합됨
커밋 이력이 그대로 남아 있어 복잡해짐
git rebase "브랜치명" 현재 브랜치를 지정된 브랜치의 위로 재배치