git 사용과정 실습 // 작업 영역, add, commit 등

woolee의 기록보관소·2022년 10월 22일
0

개발환경

목록 보기
4/17

git 작업 영역

git에 있는 4개 공간

1. working directory

  • 작업 파일이 들어있는 컴퓨터 내 디렉토리.

2. staging area(index)

  • git에 등록할 파일들이 올라가는 영역. git에 등록하기 전에 변경사항이 있는 디렉토리를 등록하는 공간

3. local repository

  • 로컬 git 프로젝트의 메타데이터와 데이터 정보가 저장되는 영역. 여기까지는 내 컴퓨터 영역임.

4. remote repository

  • github 등의 서비스를 통한 온라인 상 저장소

git add, status, restore

작업 디렉토리의 변경 내용 일부만 스테이징 영역으로 넘기고 싶으면, $ git add <파일/디렉토리경로>
여러 파일 동시에 스테이징 하려면, $ git add 파일명1 파일명2

현재 디렉토리의 모든 변경 내용을 스테이징 영역으로 넘기고 싶으면 .을 인자로 넘긴다(현재 디렉토리 이하의 변경 내용 모두 넘김). => $ git add .

현재 디렉토리 이하가 아니라 상위 디렉토리까지 포함해 모든 변경 내용을 스테이징 영역으로 보내고 싶으면,
=> $ git add -A
$ git add .를 최상위 디렉토리에서 명령하면 -A랑 똑같음.

$ git add -p를 입력하면 각 변경 사항을 터미널에서 직접 눈으로 보면서 스테이징 영역으로 넘기거나 제외할 수 있음.

작업 디렉토리랑 스테이징 영역 상태 확인하려면,
=> $ git status
결과로 3개 영역으로 구분되는데,

  • changes to be committed(커밋할 변경 사항) : 스테이징 넘어가 있는 변경 내용
  • changes not staged for commit(커밋하도록 정하지 않은 변경사항) : 아직 작업디렉토리에 있는 변경 내용
  • untracked files(추적하지 않은 파일) : 작업디렉토리에 있지만 git으로 한번도 관리된 적 없는 새로운 파일

스테이징된 파일을 취소하고 싶으면?
$ git restore ${staged 파일명}


commit 기록을 한 눈에 보고 싶으면, git log 명령

$ git --all --oneline
그래프로 보고 싶으면,
$ git --all --oneline --graph
입력 후면 vim 에디터가 켜지면, j,k 키로 위아래 스크롤이 가능하고 q 키로 종료할 수 있음.

한줄로 예쁘게 보고 싶으면,
git log --oneline

왼쪽에 있는 노란색 글자는 commit의 고유 id를 의미한다. 나오려면 q

--

head가 현재 시점을 말한다. main 혹은 origin/main가 뜨는데, push를 하면 얘네가 동일선상에 표시되고, push 전에는 2줄로 표현됨.

아래 이미지는 커밋만 하고 푸쉬는 안 한 상태

아래 이미지는 푸쉬까지 한 상태 (origin/master가 위로 올라와서 1줄로 표시되는 걸 볼 수 있다.)

위 사진에서 노란색 글씨로 된 게 커밋id임.

git --help를 입력하면 다양한 명령어 확인 가능

git diff 혹은 git difftool을 사용하면 변경 전후 차이를 확인할 수 있음. 근데 그냥 vscode에서 시각적으로 예쁘게 보려면 extension에서 git graph 같은 거 설치하고 그래프 버튼 누르면 아래처럼 보임.

vim 에디터는 hjkl 키로 이동가능하고, 나가려면 :q 여러번 입력하거나 :qa 입력


git 사용 과정 실습

내가 작업하는 코드를 매일 저장해둬서 언제든지 돌아가고 싶으면 git을 쓰면 된다.
git commit을 쓰면 현재 파일 상태를 스냅샷을 저장해둠.
(add는 내 작업폴더에서 스테이징 영역으로 등록하는 걸 말하는 것이고, commit은 스테이징 영역에 있는 걸 로컬 저장소로 올리는 걸 말함. 이제 메모 가능, push)

작업 폴더에서 git을 사용하고 싶다면 (git 초기화, 즉 버전관리하고 싶다면)

$ git init 

위 코드를 입력하면 git 초기화가 되고, 폴더 안에 숨김 폴더로 .git 폴더가 생성됨.
만약 git 삭제하려면, .git 폴더만 삭제하면 끝남. 폴더 삭제하려면 rm -rf .git 입력하면 됨.
cd .git 입력후 ls -al 입력해보면 config를 찾을 수 있는데, 이게 로컬에 대한 설정파일임. 어떤 파일이 삭제되고 추가되는지 로컬 이력들이 전부 여기 config에 저장됨. 기본적으로 .git은 숨김 파일이라 설정을 해줘야 보인다.

git 초기화란? 해당 폴더 안에 들어가 있는 모든 파일들을 git으로 관리하겠다는 것임. 즉, local repository를 생성한다는 개념.

  • 현재 프로젝트에서 변경사항을 추적(버전 관리)하는 걸 시작하겠다는 게 git init 인 것이다.


git init을 하면 위처럼 뜨는데 좌측하단에 브랜치가 main이 된 걸 확인할 수 있다.

이 상태에서 앞서 배운 초기설정을 해주면 되는데,

$ git config --global core.autocrlf input # 맥
$ git config --global core.autocrlf true # 윈도우

을 입력해준다.

그리고 나서

$ git config --global user.name "wooleejaan" # 여기에는 본인 깃허브 이름을 넣는 게 좋다. (일치할 필요는 없고) 

그 다음 이메일 주소도 입력해준다.

$ git config --global user.email "wooleejaan@gmail.com"

이렇게까지가 초기설정인데, 이건 git을 처음 사용할 때만 설정하면 되고, 이후에는 이렇게 설정한 정보들로 git을 사용한다.

정상적으로 등록되었는지 확인하려면 (빠져나가려면 q 입력)

$ git config --global --list 

이제 git status를 입력해보면 파일 목록을 아직 추적하지 않는다고 뜰 것이다. git init을 하면 빨간색 이름으로 등록이 되는데, 프로젝트 내에서 버전관리를 시작하더라도 모든 파일을 다 추적하는 게 아니라, 어떤 파일을 기준으로 버전 관리를 할 건지 명시 해주기를 기다리는 상태이다.

git add .를 입력하고 다시 git status를 입력해보면 초록색으로 새 파일들이 쭉 뜬다. 버전 관리를 하겠다는 의미이다. 변경사항을 추적할 특정 파일을 지정할 수도 있고, 최상위노드에서 .을 사용하면 모든 파일을 추적하겠다는 의미를 갖는다. (당연히 업로드하지 않아도 되는 파일이 있을텐데 그건 .gitignore로 관리하면 된다)

add를 하면 staging area(index)에 등록된다.
버전으로 만들 준비가 된 상태. 혹은 변경사항을 추적 중인 상태.

git commit -m 'start my project'를 입력하면 본격적으로 버전을 생성하고, 메시지로 해당 버전에 대한 메모사항을 작성한다. commit이 버전을 생성하겠다는 의미라고 보면 된다. 이 버전이 어떤 역할인지 메모해야 되니까 m이라는 flag로 메모 작성.

git log를 입력하면 커밋으로 등록한 버전들을 확인해볼 수 있다. 작업을 하다가 새로운 파일을 추가/수정한다든지 해서 새로운 버전을 만들고 싶으면 또 commit을 하면 되고 ... log를 통해 버전 내역을 확인해볼 수 있는 것.

쉽게 말해 아래처럼 입력하면 파일 상태를 기록해둔다(버전 생성)

$ git add 파일명
$ git commit -m '메시지명' // 커밋할 때 메세지 입력

커밋까지 마친 상태는 우리의 컴퓨터에까지만 등록 된 상태. 이걸 github 서비스에 업로드할 수 있어. 컴퓨터가 고장나서, 프로젝트 폴더를 실수로 삭제한다든지 할 수 있으니까.

github에 가서 repository를 생성한 뒤(보통은 public이지만 중요한 내용은 당연히 private으로 생성해야 한다), 우리 컴퓨터에서 만든 예제를 비어 있는 원격저장소로 업로드를 해야 한다. 이때 필요한 게 원격 주소(http/ssh)이다.

# 원격저장소주소 이름을 origin으로 하겠다는 의미이다.
$ git remote add origin <원격저장소주소> 

그리고 push를 해주면 업로드가 완료된다.
git push origin main 이므로 원격저장소 이름인 origin 중에서 main이라는 브랜치에 업로드하겠다는 의미.

수정사항이 생기면

코드를 수정한 뒤 저장하면 vscode 자체적으로 파일에 M(Modified)으로 표시해준다. 그리고 git status를 입력해보면 아래와 같이 변경사항을 알려준다.

이 수정사항을 추적이 가능한 상태로 만들기 위해 git add .를 입력하고 다시 git status를 입력하면 아래와 같이 초록색으로 바뀐 걸 알 수 있다.

그리고 하나의 버전으로 만들기 위해 git commit -m 'message'를 입력하고, git log를 입력해보면 아래와 같이 뜨는 걸 확인할 수 있다.
처음 버전 생성할 때 작성했던 메시지인 start my project가 적혀 있고, 그 다음으로 작성한 메시지인 changing badge image가 찍히는 걸 볼 수 있다. 이렇게 커밋 내역(버전 내역)을 모두 확인할 수 있다.

또 다른 수정사항으로서, 새로운 파일을 생성하면 U(Untracked file)라는 표시가 붙는다. 새로 생성되어 추적하지 않는 파일이라는 의미이다.

이 버전들을 원격저장소에 push해준다. git push origin main (우리가 앞서 원격저장소의 별칭을 origin으로 설정했다. 뒤에 있는 main은 브랜치)

그리고 나서 git log를 다시 찍어보면 origin/main이 HEAD로 이동한 것을 확인할 수 있다.

Branch로 가지 뻗기

우리가 설정한 main 브랜치는 하나의 큰 줄기에 해당한다. 여기에서 가지를 뻗어 여러 기능들을 개발한 다음, 기능이 문제가 없다고 판단될 때 그 개별 가지들을 main 줄기로 합친다. 합치는 걸 merge라고 한다.

우선 git branch를 입력하면 관리되고 있는 branch 목록을 확인할 수 있다.
git branch -a를 입력하면 원격저장소(별칭과 브랜치명까지도)도 확인할 수 있다.

git branch <브랜치명>을 통해 기능 개발을 할 수 있는 가지를 생성할 수 있다. git checkout <생성한 브랜치명>을 통해 브랜치를 전환할 수 있다.

이렇게 브랜치를 생성해서 개발하면, 보통 배포를 하더라도 특정 브랜치(예를 들어 main)의 내용만을 바라보고 있으므로 다른 브랜치에서 기능 개발을 하더라도 실제 product에는 반영이 되지 않는다. 이후 개발을 완료하고 나서 main 브랜치에 병합을 하면 그때서야 product에 반영된다.

git log --graph --oneline --all을 입력해보면 아래 그림처럼 현재 내가 signin 브랜치에 있으므로 HEAD가 signin 브랜치를 가리키고 있고, main과 signin 브랜치가 구분된 걸 확인할 수 있다. 혹은 extension으로 git graph 같은 걸 install해서 더 편리하게 확인해볼 수도 있다.

브랜치 병합 Pull Request

위에서처럼 브랜치를 만들고 개발을 하더라도 이건 로컬 영역일 뿐이다. 원격저장소에도 해당 브랜치를 생성해주려면 push 작업을 해야 한다.

git push origin <새로 만든 브랜치명>을 해주면 아래와 같이 브랜치가 추가된 것을 확인할 수 있다. (새로운 환경에서 원격저장소로 push하려면 github 권한을 확인하는 절차를 거쳐야 한다)

원격저장소로 새로운 브랜치를 push한 상태에서, github의 Pull requests 탭을 들어간다. 그리고 New pull request 버튼을 누른다.

그러면 Compare changes 화면이 나오고, 내가 개발한 signin 브랜치를 compare 브랜치에 넣는다. base: main은 합쳐질 브랜치를 말하고, compare: signin은 새로운 내용을 담고 있는 브랜치인 것이다.

Able to merge라는 메시지가 떴으므로
Create pull request 버튼을 누르고, 내용도 담아서 Create pull request를 또 누르면
이렇게 open과 함께 Pull requests 탭에 1이 표시된 걸 확인할 수 있다.

밑으로 내려가서 Merge pull request => Confirm merge 까지 버튼을 누르면
초록색으로 open 이었던 게 보라색의 merged로 변경되고 병합이 완료되는 걸 볼 수 있다.

Branch protection rule은 아직은 자세히 공부하지 않았으므로 아래와 같이 간단하게만 설정해두었다.


참고

git 동작 원리
쉽게 설명하는 git 기초 1. add, commit
git add 기본 개념/사용법

profile
https://medium.com/@wooleejaan

0개의 댓글