[TIL | 2024-08-21] Git과 GitHub 기초
오늘 공부한 내용 요약
Git과 Github를 직접 설치하고 실습하는 과정에서 이 둘의 사용법과 기본적인 개념에 대해 알아갈 수 있었다.
Git이란?
Git은 분산형 버전 관리 시스템으로 개발자가 소스 코드를 포함한 모든 파일의 변경 내역을 관리하고 추적할 수 있도록 도와준다.이러한 파일의 변경 내역을 관리하고 추적하는 것을 "버전 관리"라고 한다. 버전 관리 시스템을 사용하면 코드의 변경 내역을 추적하고, 필요에 따라 이전 버전으로 돌아갈 수 있는 기능을 제공한다. 즉, 개발자들은 Git을 사용하여 작업의 이력을 체계적으로 관리하고 협업 과정에서 발생하는 문제를 효과적으로 해결할 수 있다.
분산형 버전 관리 시스템이란?
분산형 버전 관리 시스템은 개발자가 자신의 로컬 컴퓨터에 전체 프로젝트와 그에 따른 버전 이력을 통제로 복사하여 관리하는 방식을 말한다. 이러한 관리 방식으로 네트워크 연결 없이도 독립적으로 작업을 수행할 수 있고, 개발자가 전체 프로젝트의 복사본을 가지고 있기 때문에 안정성이 높다.
Git 사용해보기
1. Git 초기화
Git을 사용하기 위해 즉, 파일의 버전 관리를 위해서는 먼저 Git 리포지토리를 초기화 해야한다. 이렇게 하면 Git이 해당 폴더의 파일들을 추적하고 관리할 수 있도록 한다.
Git 초기화를 하는 방법은 관리하고자 하는 폴더에 터미널을 열어 `git init` 명령어를 입력해 초기화를 할 수 있다.
위 명령어를 통해 초기화 하게 된다면 .git 폴더가 생성된다. 이 폴더는 Git 리포지토리 핵심으로 Git이 파일과 디렉토리를 추적하고 관리를 할 수 있도록 모든 데이터와 메타 데이터를 저장하는 곳이다.
2. 파일의 변경 / 추가 / 삭제
Git 리포지토리를 초기화한 후에는, 파일의 변경, 추가, 삭제하는 모든 작업이 Git에 의해 추적된다. Git이 정말 모든 작업을 추적하는지 확인하기 위해 Git이 관리하고 있는 hello-world 디렉토리에 새로운 파일 hello.txt 파일을 추가하고 `git status` 명령어를 사용해보았다.
- On branch master : 현재 작업중이 브랜치가 master 임을 나태난다. master는 기본 브랜치이다.
- No commits yet : 아직 리포지토리에 커밋된 변경 사항이 없음을 의미한다. 즉 저장 기록이 없다는 이야기이다.
- Untracked files : git 이 추적하지 않고 있는 파일들을 나타낸다. 여기서 hello.txt 파일이 보이는 이유는 파일을 새로 추가하였지만 Git에 추적 대상에 포함되지 않았기 때문이다.
git status - - short 명령어
- ?? : 추적되지 않은 파일
- A : 추가된 파일
- M : 수정된
- D : 삭제된
Git 리포지토리 초기화 후, 파일의 변경, 추가, 삭제 작업이 Git에 의해 추적된다고 하지만, 이 과정은 자동으로 이루어지지 않는다. Git이 파일을 추적하기 위해서는 사용자가 `git add` 명령어를 통해 상태가 변경된 파일을 Stage 영역에 추가해야한다. 이 과정은 Git에게 이 파일을 추적하고 다음 커밋에 포함시켜라 라고 알려주는 역할을 한다.
3. Stage 영역
이전에 Git에서 파일을 추적하기 위해 `git add` 명령어를 사용하여 Stage 영역에 파일을 추가한다고 하였다.
Stage 영역은 파일이 커밋되기전에 임시로 저장되는 공간으로 이 영역을 통해 사용자가 어떤 파일을 커밋할지 선택하고 특정 변경 사항만 커밋할 수 있도록 한다.
이전에 만들었던 hello.txt 파일을 `git add hello.txt` 명령어를 통해 stage영역에 추가하고 다시 상태를 조회해보았다.
`git add` 명령어를 사용하기 전과 달리 Changes to be committed이 추가된것을 확인할 수 있다. 이 내용은 Stage 영역에 추가 되어 커밋할 준비가 된 변경 사항들을 보여주는것이다.
만약 stage 영역에 추가된 파일을 삭제하고 싶다면 다음과 같은 명령어를 사용하면 된다.
이 명령어는 stage 영역에 추가된 파일을 stage 영역에서 제거하지만, 파일 자체는 디렉토리에서 삭제하지 않는다.
git rm --cached <파일명>
`git rm --cached hello.txt` 명령어를 입력하고 git의 상태를 확인하면 추적하지 않는것을 확인할 수 있다.
만약 stage영역에 추가된 상태로 파일을 강제 삭제 한다면 어떻게 될까
파일이 Stage에 추가된 상태에서 삭제하면, git status에서 해당 파일이 "삭제된 상태"로 표시되며, 이 파일은 다음 커밋에서 삭제된 것으로 기록된다. 여기서 커밋을 수행하면 Stage에서 삭제된 파일이 리포지토리에서도 제거 된다. 삭제된 파일을 다시 Stage에 추가하려면, 파일을 복원한 후 git add 명령어를 사용하여 다시 Stage에 추가할 수 있다.
4. 커밋해보기
commit은 Git에서 파일 상태를 저장하고, 변경 사항을 기록하는 핵심적인 작업이다. commit을 통해 Git 리포지토리의 상태를 특정 시점으로 기록할 수 있으며 이 기록을 참고하여 나중에 되돌아 갈 수 있다.
커밋은 변경된 파일들의 스냅샷을 저장하는 작업이다. 각 커밋은 고유한 해시 값을 가지며 커밋 메세지를 통해 변경 사항의 내용을 설명한다.
커밋 메세지는 커밋 할 때 작성하는 메세지로 변경 사항을 설명하는 중요한 정보이다.
명확하고 구체적으로 작성해야 한다.
commit을 사용하기 위해서는 stage영역에 파일이 추가가 되어있어야 한다.
추가가 되어있지 않은 상태로 커밋을 진행하게 된다면 위와 같은 내용이 출력된다. 이 출력은 Git이 커밋할 준비가 완료될 파일이 없다는 것을 나타낸다. 다시 stage영역에 추가하고 커밋을 진행해보았다.
커밋은 아래 명령어를 통해 커밋할 수 있다.
git commit -m "메세지 내용"
커밋이 완료되면 Git 리포지토리에 기록되어 해당 시점의 파일 상태와 파일의 변경 사항이 저장된다. 각 커밋은 고유한 해시값을 가지고 있어 `git log` 명령어를 이용하여 변경 사항을 추적할 수 있다.
5. branch
branch란 Git 리포지토리 내부에서 독립적인 작업 공간을 만들어, 변경 사항을 별도로 관리할 수 있도록 해주는 기능이다.
기본 브랜치는 'master' 또는 'main' 이며 새로운 브랜치를 만들어 기존 브랜치와 독립적인 작업을 진행할 수 있고 필요시 기존 프로젝트와 병합도 가능하다.
아래는 git branch를 생성하고 branch를 조회하는 명령어이다.
git branch 이름
git branch
branch를 생성하였으면 `git checkout 브랜치이름` 명령어를 통해 브랜치를 변경할 수 있다.
새로 만든 브랜치 choi에 새로운 파일을 추가하고 기존 브랜치와 병합하는 과정
6. 병합 충돌
병합 충돌은 두 브랜치에서 동일한 파일의 같은 부분을 서로 다르게 수정했을 때 발생한다. Git은 자동으로 이러한 충돌을 해결할 수 없기 때문에 사용자가 수동으로 해결해야 한다. 충돌을 해결하기 위해서는 충돌 표시를 제거하고 변경 사항을 Stage에 추가 및 커밋을 진행하면 된다.