컴퓨터 사이언스 (CS)/Docker & Git

깃(Git) 개념 및 핵심 명령어 총 정리 (1)

한소희DE 2021. 9. 24. 00:29

01. Git이란?

코드의 버전 관리 시스템 중 하나

 

코드를 짤 때는, 여러 명이 협업해서 하나의 버전을 생성되기 때문에, 되돌리는 과정 등이 부가적으로 필요하다.

또한 중간마다 변화사항이 생길 때마다 백업도 필요한데, 유의미한 변화를 중심으로 효율적 백업이 필요하다.

이런 버전 관리작업을 돕는 도구 중 하나가 바로 Git 이다!

 

 

 

02. Github란?

각자의 컴퓨터에만 존재하는 버전(local에서 만들어준 버전)을 저장/관리해주는 서비스

 

우리가 만약 원격 저장소에 저장을 한다면, 레포지토리에 저장된 모든 버전들을 저장할 수 있다.

 

 

 

 

03. Git 버전에 대하여

 

3-1. Git 내에서 버전이 생성되는 단계

 

Git은 세 개의 공간이 존재한다.

 

 

1. working directory (작업공간) : 내가 코드 작업을 현재 진행하는, 즉 파일의 생성/수정/삭제가 이뤄지는 공간

이 작업공간에서 수정한 모든 것을 버전으로 생길 필요는 없다. 왜냐면 굳이 업데이트하고 싶지 않은 경우가 존재하기 떄문이다. 따라서 작업공간 내에서 원하는 파일만 선정해서 버전으로 설정하는게 좋다.

 

2. staging area - 버전 후보들이 올라오는 공간이며, 작업공간에서 선별.

 

3. Repository - 최종 버전이 된 것을 하나의 버전으로써 저장하는 공간, 이 곳에는 지금까지의 지난 모든 버전들에 대해 저장한다.

 

 

이 공간 사이에서, 움직임으로써 버전이 생성되는데, 아래의 단계를 거친다.

1. 버전이 될 파일들을 선별(working directory -> staging area)

2. 선별된 파일들 중에서 최종 선정해 하나의 버전을 생성하는 작업(staging area -> repository)

 

 

 

 

04. Git 핵심 명령어 정리 (1)

 

1. git init 

이 폴더 안에서 버전관리를 시작하겠다는 명령어다.

아래처럼, ls -al 명령어 실행 시, git init 명령을 한 이후에는 .git 폴더가 생긴 것을 알 수 있다.

 

2. git status

해당 폴더의 상태를 확인한다. 파일의 수정 여부 등을 확인할 수 있다.

 

3. git add 파일명 (전체를 옮기고 싶으면 파일명 대신 .)

staging area 로 옮기는 작업이다.

 

4. git rm --cached 파일명

staging area 에서 내리는 (= git add 취소하는) 방법이다.

 

5. git commit -m "commit message"

빠른 commit 을 수행한다. 만약 자세한 커밋 메시지를 남기고 싶다면, git commit 이라고만 명령을 주면 된다.

특정 add 한 파일을 commit 하고 싶은 경우 git commit -m "변경내역" 파일(또는폴더)경로 or 파일명 명령어를 준다.

 

6. git config --global user.email "you@example.com"

7. git config --global user.name "Your Name"

계정 설정 방법이다.

 

8. git log 

커밋 현황을 확인할 수 있다.

 

9. git commit -am "commit message"

add와 commit 을 동시에 하는 코드다.

단, 한 번이라도 커밋을 했던 대상에서만 가능한 명령이다.

 

10. git remote add origin 주소

주소와 로컬을 연결하기 위해, remote 명령어로 주소를 등록한다.

 

11. git branch -M main

main 이라는 브랜치를 생성한다. 

 

12. git push -u origin main

해당 origin 주소의 main 브랜치에 commit 내역을 저장한다.

이때, 처음 push 이후의 push는 git push 만 작성해도 된다. (단, 등록한 origin의 main 브랜치에 저장이 될 것이다.)

 

 

 

4-1. RESET 명령어 알아보기 - add, commit 리셋 방법

 

1. git reset --hard HEAD^

수정한 것까지 통째로 되돌리기 (레포지토리에서 워킹디렉토리 전까지 & 첫번째 버전)

가장 최근 커밋으로부터 한 개 전으로 되돌리는 명령어다.

만일 최근 커밋으로부터 2개 전으로 되돌리기를 원하면 HEAD^^라고 작성한다.

 

혹은, 특정 상태로 되돌리고 싶으면 git reflog 해서 나온 아이디를 이용하여 git reset --hard <id> 명령어를 이용하면 된다.

 

 

2. git reset --mixed HEAD^

add 한 것까지 되돌리기. 즉, 레포지토리에서 워킹디렉토리까지만 변경한다.

최근커밋과 add 된 내용(staging area)이 삭제되나, working directory 에 있는 내용은 삭제되지 않는다.

 

 

3. git reset --soft HEAD^

commit 한 것까지 살짝만 되돌리기 (레포지토리에서 스테이징 area까지)

working directory, staging area는 그대로 보관된다는 특징이 있다.

 

 

4-1. Branch 명령어 알아보기

 

 

Git Branch의 필요성?

직접 코드를 주고 받을때, 올바른 병합을 위해 코드의 모든 부분이 완벽히 동기화가 되는지 확인해야 한다.

이런 문제를 해결해야 할 때 Branch가 유용하게 쓰인다.

Git의 협업 원리는 작업 단위로 나눠서 각자 작업한 뒤 합치는 것이다. 따라서 Branch 가 필요하다.

 

 

 

1. git branch

현재 branch 목록 확인

※ git branch는 한번이라도 커밋을 한 다음 브랜치 작업을 해야 한다.

 

2. git branch <브랜치이름>

브랜치 생성

 

3. git checkout <브랜치이름>

해당 브랜치로 전환

🔥 여기서 잠깐! 브랜치에 잘 들어갔는지 확인하는 방법? 
ls -al 명령어를 사용한다. 특정 Branch에 Commit을 하는 순간, 다른 Branch에서 해당 파일을 확인할 수 없다.

 

 

4. git merge <합치려는 branch>

현재 checkout된 Branch에 다른 branch를 합칠 때 사용

🔥 어떤 branch를 어디로 합칠 것인가?
만약 main 브랜치에 my-branch를 합치고 싶으면, 병합의 결과가 되는 대상(main)에 checkout를 한 뒤, merge 함수 뒤에 합치려는 branch 명을 작성한다.

 

 

 

05. 원격 저장소(Repository)로 협업하는 방법

 

1. 나는 변함없고 원격이 변한 경우 pull & push

2. 나도 변했고 원격도 변한 경우 pull request

3. push 권한 주고 (collaborator 추가하기)

 

05 이후로부터는 다음 포스팅에서 계속 다뤄보도록 하겠다 !